подозрительное изменение структуры данных в r при составлении списка из двух моделей арима - PullRequest
1 голос
/ 19 мая 2019

пример данных здесь:

err <- ts(c(0.6100, 1.3500, 1.0300, 0.9600, 1.1100, 0.8350 , 0.8800 , 1.0600 , 1.3800 , 1.6200,  1.5800 , 1.2800 , 1.3000 , 1.4300 , 2.1500 , 1.9100 , 1.8300 , 1.9500  ,1.9999, 1.8500 , 1.5500 , 1.9800  ,1.7044  ,1.8593 , 1.9900 , 2.0400, 1.8950,  2.0100 , 1.6900 , 2.1800 ,2.2150,  2.1293 , 2.1000 , 2.1200 , 2.0500 , 1.9000,  1.8350, 1.9000 ,1.9500 , 1.7800 , 1.5950,  1.8500 , 1.8400,  1.5800, 1.6100 , 1.7200 , 1.8500 , 1.6700,  1.8050,  1.9400,  1.5000 , 1.3100 , 1.4864,  1.2400 , 0.9300 , 1.1400, -0.6100, -0.4300 ,-0.4700 ,-0.3450), frequency = 7, start = c(23, 1), end = c(31, 4))

Я просто создам две arima модели и составлю список и таблица данных двух моделей:

m1 <- arima(x = err, order=c(0,0,5), include.mean=F)
m2 <- arima(x = err, order=c(0,1,1), include.mean=F)
m.list <- list(m1, m2)
m.comb <- c(m1, m2)
m.dt <- data.table(a=m1, b=m2)

сейчас m.list[1] или m.list$coef дали значения первой модели; и это не имеет смысла для меня, я ожидаю, что m.list[1] даст мне полную первую модель, а m.list$coef даже не должно существовать. Конечно, я предполагаю, что R, по крайней мере, ведет себя немного, как другие языки, такие как python или C ++, не говоря уже о других. Я могу быть очень не прав.

m.dt, кажется, полностью теряет структуру и становится немного странным:

m.a <- m.dt[, "a"]
m.a
# output
                                                                                                                                                                                                                                                                                 a
 1:                                                                                                                                                                                                                                                                                             1.105733,1.221225,1.215059,0.939646,0.570557
 2:                                                                                                                                                                                                                                                                                                                                  0.18465
 3:  0.019905835, 0.012235097,-0.002690923,-0.018219027,-0.018363215, 0.012235097, 0.020627900, 0.007399694,-0.003498485, 0.001069299,-0.002690923, 0.007399694, 0.027766607, 0.042303357, 0.033649641,-0.018219027,-0.003498485, 0.042303357, 0.097345388, 0.071969149,-0.018363215, 0.001069299, 0.033649641, 0.071969149, 0.068308454,...
 4:                                                                                                                                                                                                                                                                                                                 TRUE,TRUE,TRUE,TRUE,TRUE
 5:                                                                                                                                                                                                                                                                                                                                -36.47995
 6:                                                                                                                                                                                                                                                                                                                                 82.95989
 7:                                                                                                                                                                                                                                                                                                                          0,5,0,0,7,0,...
 8:                                                                                                                                                                                                                                                         0.241144876, 0.672481832,-0.319954235, 0.066421765, 0.378785306, 0.003550614,...
 9:                                                                                                                                                                                                                                                                                                                                   <call>
10:                                                                                                                                                                                                                                                                                                                                        x
11:                                                                                                                                                                                                                                                                                                                                        0
12:                                                                                                                                                                                                                                                                                                                                        0
13:                                                                                                                                                                                                                                                                                                                                       60

14:                                                                                                                                                                                                                                                                                                                                   <list>

выше буквально является просто сводкой, и если мы намереваемся получить доступ к m.dt[, "a"][14], он буквально просто печатает «список» и ничего больше.

Как мне составить список из двух моделей, которые сохраняют свою первоначальную структуру? (кажется, что это очень простая реализация согласованности данных на любом языке программирования)

EDIT

, где я хотел сказать, m.comb[1] и m.comb$coef дают только коэффициенты, я отметил m.list, что было ошибкой, и указал в своем ответе @ 42-.

Ответы [ 2 ]

1 голос
/ 19 мая 2019

Вы сказали, что m.list [1] давал вам только коэффициенты. Это не совсем правильное понимание. REPL интерпретатора R отображает результат print.arima, выполненный для первой модели.

> m.list[1]
    [[1]]

    Call:
    arima(x = err, order = c(0, 0, 5), include.mean = F)

    Coefficients:
             ma1     ma2     ma3     ma4     ma5
          1.1057  1.2212  1.2151  0.9396  0.5706
    s.e.  0.1411  0.1436  0.1666  0.3120  0.2614

    sigma^2 estimated as 0.1846:  log likelihood = -36.48,  aic = 84.96

Если бы вы присвоили результат m.list[1] другому имени, вы бы обнаружили, что это был список, первый элемент которого был идентичен m1.

> m3 <- m.list[1]
> identical( m3[[1]], m1)
[1] TRUE
1 голос
/ 19 мая 2019

Вместо того, чтобы создавать столбец напрямую, поместите его в среду list, чтобы сохранить структуру models

m.dt <- data.table(a=list(m1), b=list(m2))
m.dt
#        a       b
#1: <Arima> <Arima>

Он также может быть создан из 'm.list'

m.dt <- as.data.table(lapply(setNames(m.list, c('a', 'b')), list))

Теперь мы извлекаем модели как

m.dt$a[[1]]

извлечь коэффициенты

coef(m.dt$a[[1]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...