簡體   English   中英

在R中生成隨機序列和圖

[英]generate random sequence and plot in R

我想生成一個由3000個點組成的隨機序列,它遵循正態分布。 平均值為c,標准差為d。 但我希望這些3000點位於[a,b]的范圍內。

你能告訴我怎么在R里做嗎?

如果我想繪制這個序列,如果Y軸使用生成的3000個點,那么我應該如何生成與X軸相對應的點。

你可以使用這樣的標准R函數來做到這一點:

c <- 1
d <- 2

a <- -2
b <- 3.5

ll <- pnorm(a, c, d)
ul <- pnorm(b, c, d)

x <- qnorm( runif(3000, ll, ul), c, d )
hist(x)
range(x)
mean(x)
sd(x)
plot(x, type='l')

pnorm函數用於找到用於均勻分布的限制,然后從統一生成數據,然后轉換回法線。

使用distr包更簡單:

library(distr)

N <- Norm(c,d)
N2 <- Truncate(N, lower=a, upper=b)

plot(N2)
x <- r(N2)(3000)
hist(x)
range(x)
mean(x)
sd(x)
plot(x, type='l')

注意,在兩種情況下,均值不是c而sd不是d。 如果您希望生成的截斷數據的均值和sd為c和d,那么您需要父分布(截斷前)具有不同的值(更高的sd,平均值取決於截斷值),找到這些值將是數學/統計理論課程的良好作業問題。 如果這是您真正需要的,那么添加評論或編輯問題以便具體說明。

如果要從未截斷的法線生成數據,但只繪制范圍[a,b]內的數據,則只需使用ylim參數繪制:

plot( rnorm(3000, c, d), ylim=c(a,b) )

在R中生成任意概率分布的隨機數字序列非常容易。具體來說,這是為了正態分布

c = 1
d = 2
x <- rnorm(3000, c, d)

剪切x的值以使它們僅在給定范圍內對於想要處理來自正態分布的樣本是一種奇怪的事情。 也許你真正想做的是采樣統一分布。

a = 0
b = 3
x2 <- runif(3000, a, b)

至於情節如何分配,我不確定我是否按照你的問題。 您可以使用此代碼繪制樣本的密度估計值

plot(density(x))

但是,如果您想將此數據繪制為某種散點圖,則實際上需要生成第二個數字樣本。

如果我想繪制這個序列,如果Y軸使用生成的3000個點,那么我應該如何生成與X軸相對應的點。

如果你只是產生你的積分,就像JoFrhwld所說的那樣

y <- rnorm(3000, 1, 2)

然后

plot(y)

將使用數組索引作為x軸自動繪制它們

a = -2; b = 3
plot(dnorm, xlim = c(a, b))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM