模拟被异常值污染的正态分布数据

simulation of normal distribution data contaiminated with outliers

我需要使用 r 编程模拟 1000 组正态分布(每组 60 个子组,n=5)。每组正态分布都包含 4 个异常值(超过 1.5 IQR)。有人可以帮忙吗?

提前致谢

创建具有一些异常值的 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=0sd=1 作为值 mean=1,您在评论中提供的 sd=0 没有多大意义。

上述方法并不能保证正好有4个异常值。至少会有 4 个,但在极少数情况下可能会更多,因为 rnorm() 函数不能保证它永远不会产生异常值。

另一个注意事项是 data.frames 可能不是存储数值的最佳对象。如果你的1000个data.frame都是数值型的,还是用矩阵存储比较好。

根据最终目标和存储数据的对象类型(列表、data.frame 或矩阵),有更快的方法来创建 1000 个填充随机值的对象。