我需要使用r编程来模拟1000组正态分布(每个60个子组,n = 5)。每组正态分布都包含4个离群值(大于1.5 IQR)。有人可以帮忙吗?
预先感谢
答案 0 :(得分:0)
一种创建带有一些异常值的data.frame的非常简单的方法:
# Create a vector with normally distributed values and a few outliers
# N - Number of random values
# n.out - number of outliers
my.rnorm <- function(N, num.out, mean=0, sd=1){
x <- rnorm(N, mean = mean, sd = sd)
ind <- sample(1:N, num.out, replace=FALSE )
x[ind] <- (abs(x[ind]) + 3*sd) * sign(x[ind])
x
}
N=60
num.out = 4
df <- data.frame( col1 = my.rnorm(N, num.out),
col2 = my.rnorm(N, num.out),
col3 = my.rnorm(N, num.out),
col4 = my.rnorm(N, num.out),
col5 = my.rnorm(N, num.out))
请注意,我使用mean=0
和sd=1
作为您在注释中提供的值mean=1
,sd=0
并没有多大意义。
上面的方法不能保证会有4个异常值。至少会有4个,但在极少数情况下可能会更多,因为rnorm()
函数不能保证它永远不会产生离群值。
另一个注意事项是data.frames可能不是存储数值的最佳对象。如果您所有的1000个data.frames都是数字,最好将它们存储在矩阵中。
根据最终目标和将数据存储在其中的对象的类型(列表,data.frame或矩阵),可以使用更快的方法来创建1000个填充有随机值的对象。