Cambiar ciertos valores de un vector basado en la media y desviación estándar de sus subconjuntos

Pregunta hecha: hace 8 meses Ultima actividad: hace 8 meses
up 0 down

Estoy tratando de inyectar anomalías en un conjunto de datos, esencialmente cambiando ciertos valores, basándose en una condición. Tengo un conjunto de datos, hay 10 subconjuntos. La condición es que las anomalías serían 2,8-3 veces la desviación estándar de cada segmento de distancia de la media de ese subconjunto. Por eso, estoy dividiendo el conjunto de datos en 10 partes iguales, entonces el cálculo de la media y la desviación estándar de cada subconjunto, y el cambio de ciertos valores, poniéndolos 3 desviaciones estándar de ese subconjunto de distancia de la media de ese subconjunto. El código es el siguiente:

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)

}

El error que consigo es que la desviación estándar es de NA, así que no soy capaz de establecer los valores.

Lo otro enfoque está allí por el cual puedo realizar la tarea? Tengo las anomalías Inyectar que son 2,8-3 desviaciones estándar de distancia de la rodadura significan esencialmente.

1 respuesta

up 1 down

Tiene un simple error en el código. cuando escribió
seg = y[j:j+3000] Creo que significaba seg = y[j:(j+3000)]
similar o_data = sample(j:j+3000,10) debiera ser o_data = sample(j:(j+3000),10)