заменить значения выбросов временного ряда другими значениями во временном ряду - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть временной ряд, и я хочу случайным образом заменить выбросы другими (не выбросами) значениями.Временной ряд выглядит следующим образом:

date           Category      Value1
2018-09-10       A            .4
2018-09-10       B            .6
2018-09-10       A             4
2018-09-10       C            .2
2018-09-10       D             7

Затем я попытался определить выброс следующим образом:

qn = quantile(df1$value1, c(0.05, 0.85), na.rm = TRUE)
df6 = within(df1, { value = ifelse(df1$value1 < qn[1], qn[1], df1$value1)
value = ifelse(df1$value1  > qn[2], qn[2], df1$value1 )})

Затем я хочу заменить значения выброса некоторыми значениями из столбца value1 которые не являются выбросами.

1 Ответ

0 голосов
/ 05 декабря 2018

Если вы хотите заменить случайные значения случайным образом, одним из способов будет

#Find out indices which are outliers
inds <- df1$Value1 > qn[2] | df1$Value1 < qn[1]

#Replace those outliers by randomly selecting non-outliers  
df1$Value1[inds] <- sample(df1$Value1[!inds], sum(inds))

df1
#       date  Category Value1
#1 2018-09-10        A    0.4
#2 2018-09-10        B    0.6
#3 2018-09-10        A    4.0
#4 2018-09-10        C    4.0
#5 2018-09-10        D    0.6

data

df1 <- read.table(text = "date           Category      Value1
                          2018-09-10       A            .4
                          2018-09-10       B            .6
                          2018-09-10       A             4
                          2018-09-10       C            .2
                          2018-09-10       D             7", header =T)

qn <- quantile(df1$Value1, c(0.05, 0.85), na.rm = TRUE)
...