你好,我需要找到一个区间在-1和1之间的随机数样本的平均值,置信区间为95%,然后重复这个过程50次,我使用的是计算50次重复平均值的for循环,但当我将其应用于置信区间时,它不会计算标准偏差。我有这个代码
for (i in 1:50) {
n<-100
z[i] <-runif(min=-1,max=1,n)
m[i] <-mean(z[i])
s[i] <-sd(z[i])
sigma[i] <-1.96*(s[i] /sqrt(n))
ls[i] <-m[i] +sigma[i]
li[i] <-m[i] -sigma[i]
}
您不需要for
循环,您需要应用的所有函数都是矢量化的,因此您可以执行:
simulation <- function(n){
z <-runif(min=-1,max=1,n)
m <-mean(z)
s <-sd(z)
sigma <-1.96*(s /sqrt(n))
ls <-m +sigma
li <-m -sigma
return(list(m=m, s=s, sigma=sigma, ls=ls, li=li))
}
示例
> set.seed(1)
> simulation(n=50)
$m
[1] 0.06518574
$s
[1] 0.544478
$sigma
[1] 0.1509216
$ls
[1] 0.2161073
$li
[1] -0.08573586
如果你想复制模拟函数n次,那么replicate
会对你有所帮助,参见示例:
> set.seed(1)
> replicate(5, simulation(n=50))
[,1] [,2] [,3] [,4] [,5]
m 0.06518574 0.00620252 -4.981729e-05 0.06993695 -0.04302099
s 0.544478 0.5295532 0.5554962 0.5348175 0.541016
sigma 0.1509216 0.1467847 0.1539757 0.1482439 0.149962
ls 0.2161073 0.1529872 0.1539259 0.2181808 0.106941
li -0.08573586 -0.1405821 -0.1540255 -0.0783069 -0.192983
我用50码进行了5次模拟,得到了一个矩阵。
m <- c()
s <- c()
ls <- c()
li <- c()
n <- 100
for (i in 1:50) {
z <-runif(min=-1,max=1,n)
m[i] <-mean(z)
s[i] <-sd(z)
sigma <- 1.96*(s[i] /sqrt(n))
ls[i] <- m[i] +sigma
li[i] <- m[i] -sigma
}