Ошибка в NextMethod ("[<-"): количество неверных подписок в массиве - PullRequest
0 голосов
/ 18 января 2020

Вы можете помочь мне с этой ошибкой

 Error in NextMethod ("[<-"): number of incorrect subscriptions in array

Я делаю все oop, чтобы сохранить каждый прогноз в таблице

может воспроизвести код со следующими данными

A <- matrix(c(3.42,3.08,3.93,3.51,2.79,3.16,3.39,3.21,3.51,3.26,2.66,2.86,2.94,2.91,3.67,
2.47,2.53,2.81,3.01,3.02,2.97,3.06,2.22,2.67,2.40,2.58,2.97,2.65,2.60,2.59,2.90,3.57,3.61,
3.36,3.17,3.12,2.55,2.64,3.21,2.74,2.73,2.80,3.08,3.28,3.11,2.90,2.79,2.65,2.65,2.85,3.23,
2.88,2.62,2.80,3.12,4.01,3.84,3.48,3.07,2.87,2.82,2.81,3.09,2.69,2.38,2.46,2.60,2.79,2.86,
2.77,2.29,2.42,2.26,2.82,2.62,2.09,1.97,2.49,2.39,2.30,2.29,2.47,2.16,2.08,2.19),ncol=1)
A_ <- data.frame(A)

n <- nrow(A_)
j <- 80
Historico <- ts(A_, start = c(2012,9), end = c(2019,6),frequency = 12)
Pronostico_ <- ts(A_,start = c(2012,9), end = c(2019,3), frequency = 12)
Ambas <- cbind(Historico,Pronostico_)
Historico <- Ambas[,1]
Pronostico <- Ambas[,2]
Historico <- data.frame(Historico)
Pronostico <- data.frame(Pronostico)
colnames(Historico) <- c("Historico")
colnames(Pronostico) <- c("Pronostico")
Pronostico <- ts(Pronostico, start = c(2012,9), end = c(2019,6), frequency = 12)
Historico <- ts(Historico, start = c(2012,9), end = c(2019,6), frequency = 12)
for (i in j:n)
{
  modelo_ <- tryCatch(Arima(Historico[1:i], order = c(5,0,2)),error=function(e)FALSE)

    if (!is.logical(modelo_))
    {print(modelo_)
     prediccion <- predict(modelo_,n.ahead = 1)
     q = ts(prediccion$pred, start = c(2012,9), end = c(2019,6), frequency = 12)
     e = data.frame(unclass(q))
     names(e) <- c("Pronsotico")
     Pronostico[i,1] <- e[1,1]
    }}

ошибка, я думаю, возникает здесь ¿Pronostico [i, 1] <- e [1,1]? </p>

1 Ответ

2 голосов
/ 18 января 2020

Кажется, проблема в том, что Pronostico - это одномерный временной ряд. Хотя он хорошо распечатывается в виде таблицы, доступ к нему осуществляется через один индекс. Вам нужно изменить последнюю строку вашего кода на:

Pronostico[i] <- e[1,1]

Вы можете видеть это в случае простого теста:

Pronostico <- Ambas[,2]
Pronostico
#>       Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
#> 2012                                         3.42 3.08 3.93 3.51
#> 2013 2.79 3.16 3.39 3.21 3.51 3.26 2.66 2.86 2.94 2.91 3.67 2.47
#> 2014 2.53 2.81 3.01 3.02 2.97 3.06 2.22 2.67 2.40 2.58 2.97 2.65
#> 2015 2.60 2.59 2.90 3.57 3.61 3.36 3.17 3.12 2.55 2.64 3.21 2.74
#> 2016 2.73 2.80 3.08 3.28 3.11 2.90 2.79 2.65 2.65 2.85 3.23 2.88
#> 2017 2.62 2.80 3.12 4.01 3.84 3.48 3.07 2.87 2.82 2.81 3.09 2.69
#> 2018 2.38 2.46 2.60 2.79 2.86 2.77 2.29 2.42 2.26 2.82 2.62 2.09
#> 2019 1.97 2.49 2.39   NA   NA   NA 
Pronostico[1]
# [1] 3.42
Pronostico[1, 1]
# Error in `[.default`(Pronostico, 1, 1) : incorrect number of dimensions

Кроме того, в этой строке здесь:

modelo_ <- tryCatch(Arima(Historico[1:i], order = c(5,0,2)),error=function(e)FALSE)

Arima должно быть arima.

Теперь, если я запускаю этот скрипт:

A <- matrix(c(3.42,3.08,3.93,3.51,2.79,3.16,3.39,3.21,3.51,3.26,2.66,2.86,2.94,2.91,3.67,
2.47,2.53,2.81,3.01,3.02,2.97,3.06,2.22,2.67,2.40,2.58,2.97,2.65,2.60,2.59,2.90,3.57,3.61,
3.36,3.17,3.12,2.55,2.64,3.21,2.74,2.73,2.80,3.08,3.28,3.11,2.90,2.79,2.65,2.65,2.85,3.23,
2.88,2.62,2.80,3.12,4.01,3.84,3.48,3.07,2.87,2.82,2.81,3.09,2.69,2.38,2.46,2.60,2.79,2.86,
2.77,2.29,2.42,2.26,2.82,2.62,2.09,1.97,2.49,2.39,2.30,2.29,2.47,2.16,2.08,2.19),ncol=1)
A_ <- data.frame(A)

n <- nrow(A_)
j <- 80
Historico <- ts(A_, start = c(2012,9), end = c(2019,6), frequency = 12)
Pronostico_ <- ts(A_,start = c(2012,9), end = c(2019,3), frequency = 12)
Ambas <- cbind(Historico,Pronostico_)
Historico <- Ambas[,1]
Pronostico <- Ambas[,2]
Historico <- data.frame(Historico)
Pronostico <- data.frame(Pronostico)
colnames(Historico) <- c("Historico")
colnames(Pronostico) <- c("Pronostico")
Pronostico <- ts(Pronostico, start = c(2012,9), end = c(2019,12), frequency = 12)
Historico <- ts(Historico, start = c(2012,9), end = c(2019,12), frequency = 12)
for (i in j:n)
{
  modelo_ <- tryCatch(arima(Historico[1:i], order = c(5,0,2)),error=function(e)FALSE)

    if (!is.logical(modelo_))
    {
     prediccion <- predict(modelo_,n.ahead = 1)
     q = ts(prediccion$pred, start = c(2012,9), end = c(2019,6), frequency = 12)
     e = data.frame(unclass(q))
     names(e) <- c("Pronsotico")
     Pronostico[i] <- e[1,1]
    }}

, я получаю следующий результат, сохраненный в Pronostico

Pronostico
#>           Jan      Feb      Mar      Apr      May      Jun      Jul      Aug
#> 2012                                                                        
#> 2013 2.790000 3.160000 3.390000 3.210000 3.510000 3.260000 2.660000 2.860000
#> 2014 2.530000 2.810000 3.010000 3.020000 2.970000 3.060000 2.220000 2.670000
#> 2015 2.600000 2.590000 2.900000 3.570000 3.610000 3.360000 3.170000 3.120000
#> 2016 2.730000 2.800000 3.080000 3.280000 3.110000 2.900000 2.790000 2.650000
#> 2017 2.620000 2.800000 3.120000 4.010000 3.840000 3.480000 3.070000 2.870000
#> 2018 2.380000 2.460000 2.600000 2.790000 2.860000 2.770000 2.290000 2.420000
#> 2019 1.970000 2.490000 2.390000 2.698899 2.201252 2.263816 2.894868 2.902475
#>           Sep      Oct      Nov      Dec
#> 2012 3.420000 3.080000 3.930000 3.510000
#> 2013 2.940000 2.910000 3.670000 2.470000
#> 2014 2.400000 2.580000 2.970000 2.650000
#> 2015 2.550000 2.640000 3.210000 2.740000
#> 2016 2.650000 2.850000 3.230000 2.880000
#> 2017 2.820000 2.810000 3.090000 2.690000
#> 2018 2.260000 2.820000 2.620000 2.090000
#> 2019 3.656126 3.510000 2.790000 3.160000
...