计算一系列正态随机变量的比例

时间:2014-09-26 20:06:09

标签: r statistics probability

我想检查一系列标准正态分布是否有95%的值介于-2和2之间。

要检查这个,比方说,50个标准正态分布,我正在使用x=rnorm(50,0,1),然后,为了获得比例,我正在使用length(x[x<abs(2)])/length(x)

我想重复这个任务一定数量(例如25000次)以查看我得到的不同结果。因此,我使用replicate(2500, rnorm(50,0,1)),但现在我需要一个不同的比例代码。我想到了像lapply()这样的东西,前面提到的对象replicate()作为第一个参数,作为第二个参数,我想到了获得比例的函数,但它不起作用。我怎么能以正确的方式做到这一点?

2 个答案:

答案 0 :(得分:1)

这可能有用

# You already have done this:
x <- rnorm(50, 0, 1)
length(x[abs(x) < 2]) / length(x)
##  [1] 0.96

# Now you can do something like this:
y <- replicate(25, rnorm(50,0,1)) # Doing it with 25 "replicas" for demonstration purposes
colSums(ifelse(abs(y) < 2,1,0)) / nrow(y)
##  [1] 0.98 0.98 0.94 0.90 0.94 0.98 0.94
##  [8] 0.96 0.96 0.94 0.98 0.96 0.96 0.92
## [15] 0.94 0.98 0.92 0.98 0.96 0.96 0.94
## [22] 0.92 0.94 0.96 0.98

其他方式,由aosmith in his comment提议。

mean(abs(x) < 2)
##  [1] 0.96
colMeans(abs(y) < 2)
##  [1] 0.98 0.98 0.94 0.90 0.94 0.98 0.94
##  [8] 0.96 0.96 0.94 0.98 0.96 0.96 0.92
## [15] 0.94 0.98 0.92 0.98 0.96 0.96 0.94
## [22] 0.92 0.94 0.96 0.98

答案 1 :(得分:1)

您可以replicate()一个代码块以及一个语句。怎么样

replicate(2500, {x<-rnorm(50,0,1); length(x[x<abs(2)])/length(x)})

虽然我可能会把它写成

replicate(2500, {x<-rnorm(50,0,1); mean(abs(x)<2)})

另外,replicate() + *apply组合也可以正常使用

sapply(replicate(2500, rnorm(50,0,1), simplify=FALSE), 
    function(x) mean(abs(x)<2))