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

时间:2019-06-23 01:59:13

标签: r simulation normal-distribution outliers

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

预先感谢

1 个答案:

答案 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=0sd=1作为您在注释中提供的值mean=1sd=0并没有多大意义。

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

另一个注意事项是data.frames可能不是存储数值的最佳对象。如果您所有的1000个data.frames都是数字,最好将它们存储在矩阵中。

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