Изменить определенные значения вектора на основе среднего значения и стандартного отклонения его подмножеств - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь ввести аномалии в набор данных, существенно меняя определенные значения в зависимости от условия.У меня есть набор данных, есть 10 подмножеств.Условие состоит в том, что аномалии будут в 2,8-3 раза превышать стандартное отклонение каждого сегмента от среднего значения этого подмножества.Для этого я делю набор данных на 10 равных частей, затем вычисляю среднее и стандартное отклонение каждого подмножества и изменяю определенные значения, помещая их 3 стандартных отклонения этого подмножества от среднего значения этого подмножества.Код выглядит следующим образом:

set.seed(1)
x <- rnorm(sample(1:35000, 32000, replace=F),0,1) #create dataset
y <- cumsum(x) #cumulative sum of dataset
j=1
for(i in c(1:10)){ 
  seg = y[j:j+3000] #name each subset seg 
  m = mean(seg)     #mean of subset
  print(m)

  s = sd(seg)       # standard deviation of subset
  print(s)

  o_data = sample(j:j+3000,10) #draw random numbers from j to j + 3000
  print(o_data)

 y[o_data] = m + runif(10, min=2.8, max=3) * s #values = mean + 2.8-3 * sd
 print(y[o_data])

 j = j + 3000 # increment j
 print(j)

}

Я получаю сообщение об ошибке: стандартное отклонение равно NA, поэтому я не могу установить значения.

Какой другой подход позволяет мне выполнить задачу?У меня есть впрыскиваемые аномалии, которые по существу составляют 2,8-3 стандартных отклонения от скользящего среднего.

1 Ответ

0 голосов
/ 22 января 2019

У вас есть простая ошибка в вашем коде.когда вы написали
seg = y[j:j+3000] Я считаю, что вы имели в виду seg = y[j:(j+3000)]
Аналогично o_data = sample(j:j+3000,10) должно быть o_data = sample(j:(j+3000),10)

...