我想检查一系列标准正态分布是否有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()
作为第一个参数,作为第二个参数,我想到了获得比例的函数,但它不起作用。我怎么能以正确的方式做到这一点?
答案 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))