【问题标题】:simulation of normal distribution data contaiminated with outliers被异常值污染的正态分布数据的模拟
【发布时间】:2019-06-23 01:59:13
【问题描述】:

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

提前致谢

【问题讨论】:

  • 请澄清您的问题 - “set”和“subgroup”有什么区别?什么是n?您是否需要创建 1000 个 60 列和 5 行的数据框?或者是别的什么?应该使用哪些平均值和标准差值?它们对所有集合都相同吗?
  • 我需要模拟 1000 个 60 行 5 列的数据帧。平均值为 1,标准差为 0。这对于所有 1000 个数据帧都是相同的。对此上瘾,我想用 4 个异常值(>1.5IQR)来控制它。

标签: r simulation normal-distribution outliers


【解决方案1】:

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

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

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

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

【讨论】:

  • 非常感谢。你确实是对的。平均值=0,变量=1。欣赏它。
  • 是的,它对我很有效。 tqvm. 深深地欣赏它。标记完成。
猜你喜欢
  • 2013-06-12
  • 2012-11-20
  • 1970-01-01
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
  • 2019-08-19
相关资源
最近更新 更多