我想在具有特定均值(M)和标准偏差(S)的顺序数组((100 * 8)* 5000)中绘制正常随机数,但我希望它们仅在M±3S范围内,所以我的阵列中没有超出这些限制的异常值。
有什么建议吗?我想在R中编写一个基于该数组的程序进行一些模拟研究。我正在使用以下R代码生成我的数据集:
for(i in 1:5000){
for(j in 1:8){
Dat[,j,i]=rnorm(100,mean=muu[j],sd=sigma[j])
}
}
现在,我们想要摆脱上述数据中高于muu±3sigma的那些值。当然,我们必须用新值替换丢弃的值,以便Dat数组的维度保持不变。
答案 0 :(得分:2)
这是一个开始,但我敢打赌,有一个更优雅的解决方案。 首先生成下一步的样本,将其子集化为所需的值。当然,你必须根据自己的意愿调整价值。
set.seed(123)
rs <- rnorm(10000, mean = 10, sd = 3)
rs1 <- rs[ rs >= -19 & rs <= 19 ]
我认为我的第一个解决方案并没有那么顺利。我刚刚编写了一些可能适合您的目的的代码。以下是步骤。
TRUE
是针对所需条件的基于该向量对data
进行子集化,并将TRUE为TRUE的值(请原谅我的文字游戏)替换为用于生成样本的均值
数据&lt; - 数组(NA,dim = c(100,8,5000))
for(i in 1:5000){
data[ , , i] <- rnorm(800, 3, 1)
}
bound <- 3 + c(-1, 1)*3*1
pr <- data <= bound[1] | data >= bound[2]
data[pr] <- 3