моделирование данных нормального распределения, загрязненных выбросами - PullRequest
0 голосов
/ 23 июня 2019

Мне нужно смоделировать 1000 наборов нормального распределения (каждая 60 подгрупп, n = 5), используя r программирование.Каждый набор нормального распределения загрязнен четырьмя выбросами (более 1,5 IQR).кто-нибудь может помочь?

Заранее спасибо

1 Ответ

0 голосов
/ 23 июня 2019

Очень простой подход к созданию 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 являются числовыми, лучше хранить их в матрицах.

В зависимости от конечной цели и типа объекта, в котором хранятся ваши данные (список, дата.кадр или матрица), существуют более быстрые способы создания 1000 объектов, заполненных случайными значениями.

...