Использование R для прогнозирования будущих значений

#r

#r

Вопрос:

В настоящее время я выполняю упражнение, и я предполагаю сделать прогноз на следующий год, используя множественную линейную регрессию, но у меня ошибка.

введите описание изображения здесь

Линейная регрессия работает, но я не могу предсказать будущие значения, используя R.

 mod5 <- tslm(tsdata[,5]~tsdata[,10] tsdata[,11] tsdata[,12] tsdata[,13] tsdata[,14] tsdata[,28] tsdata[,29] tsdata[,30] tsdata[,31] tsdata[,32] tsdata[, 15]   tsdata[, 16]   tsdata[,17] tsdata[,18] tsdata[,6] tsdata[,7] tsdata[,8] tsdata[,9] tsdata[,1])
fmod5 <- forecast(mod5,h=12)
 
 tsdata <- structure(c(1, 2, 3, 4, 5, 6, 2008, 2008, 2008, 2008, 2008, 2008, 
1, 2, 3, 4, 5, 6, 76, 115, 77, 84, 114, 87, 59, 64, 59, 48, 80, 
78, 0.56, 0.4, 0.61, 0.58, 0.66, 0.7, 0.13, 0.12, 0.18, 0.22, 
0.23, 0.19, 0.19, 0.43, 0.2, 0.19, 0.09, 0.1, 0.1, 0.03, 0, 0, 
0, 0, 0.26, 0.24, 0.14, 0.3, 0.28, 0.22, 0.27, 0.43, 0.2, 0.19, 
0.09, 0.14, 0.26, 0.13, 0.11, 0.11, 0.26, 0.26, 0.19, 0.13, 0.42, 
0.32, 0.31, 0.26, 0, 0.06, 0.1, 0.05, 0.04, 0.09, 0.4, 0.53, 
0.29, 0.27, 0.28, 0.1, 0.39, 0.21, 0.53, 0.45, 0.54, 0.65, 0.19, 
0.25, 0.16, 0.27, 0.17, 0.24, 0.25, 0.51, 0.51, 0.35, 0.34, 0.34, 
0.03, 0, 0, 0, 0, 0, 0.26, 0.21, 0.05, 0.08, 0.14, 0.32, 0, 0, 
0, 0, 0, 0.05, 0.1, 0.25, 0, 0.01, 0.06, 0.08, 0.17, 0.12, 0.27, 
0.23, 0.15, 0.27, 0, 0, 0, 0, 0, 0, 0.25, 0.33, 0.42, 0.34, 0.36, 
0.19, 0.06, 0.01, 0.02, 0.07, 0.2, 0.06, 0.1, 0.06, 0.22, 0.25, 
0.06, 0, 0.27, 0.31, 0.42, 0.5, 0.51, 0.44, 0.21, 0.15, 0.29, 
0.15, 0.21, 0.14, 0.4, 0.46, 0.05, 0.09, 0.21, 0.4, 0, 0, 0, 
0, 0, 0, 0.1, 0.06, 0.22, 0.25, 0.06, 0, 0, 0, 0, 0, 0, 0, 0, 
0.0087, 0.01, 0.07, 0, 0, 0, 0, 0.05, 0.03, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0.01, 0, 0, 0.06, 0.01, 0.06, 0.11, 0.04, 0, 0.76, 
0.9, 0.68, 0.59, 0.77, 0.94, 0, 0, 0, 0.04, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0087, 0, 0, 0.03, 0, 0, 0, 0.01, 
0.01, 0, 0.02, 0, 0, 0, 0, 0, 0, 0.03, 0.02, 0.1, 0.05, 0, 0, 
0.05, 0, 0, 0, 0.07, 0, 0, 0, 0, 0, 0, 0, 0.01, 0.01, 0, 0.03, 
0.00877, 0, 0, 0, 0.05, 0, 0.00877, 0, 0, 0, 0, 0, 0, 0, 0.01, 
0.0087, 0, 0.01, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0.0087, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0.01, 0, 0.04, 0.02, 0.01, 0, 0, 0, 0, 0, 0.03, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 98, 92, 
101, 110, 100), .Dim = c(6L, 67L), .Dimnames = list(NULL, c("period", 
"year", "month", "numadmit", "numrt", "cc1", "cc2", "cc3", "cc4", 
"hr1", "hr2", "hr3", "hr4", "hr5", "age1", "age2", "age3", "female", 
"tumEA", "tumLA", "tumLP", "tumNC", "tumOC", "tumOT", "tumPH", 
"tumSL", "tumTH", "c0", "c1", "c3", "c4", "c7", "h800", "h801", 
"h802", "h803", "h804", "h805", "h807", "h808", "h809", "h812", 
"h814", "h820", "h824", "h826", "h829", "h831", "h833", "h834", 
"h835", "h843", "h844", "h848", "h850", "h851", "h852", "h855", 
"h856", "h868", "h894", "h908", "h949", "h950", "h952", "h972", 
"numdiag")), .Tsp = c(1, 1.41666666666667, 12), class = c("mts", 
"ts", "matrix"))
 

Комментарии:

1. Опубликуйте некоторые данные, какие пакеты вы используете, и сообщение об ошибке.

2. я использую fpp2, прогнозирую,

3. Это мое установленное значение, но я хочу иметь прогноз на следующий год:

4. Вы можете использовать dput(head(tsdata)) для отображения некоторых ваших данных (отредактируйте исходный вопрос и вставьте туда результаты).

5. Спасибо, мистер @EricKrantz, я внес изменения

Ответ №1:

У вас должны быть значения для переменных предиктора / функции, если они не являются месяцами или сезонами, чтобы прогноз сработал.

Также лучше попробовать использовать формат формулы в функции tslm, чтобы упростить задачу. Вот пример из книги fpp2.

 fit.consBest <- tslm(Consumption ~ Income   Savings   Unemployment,
                   data = uschange)

newdata <- data.frame(
              Income = c(1, 1, 1, 1),
              Savings = c(0.5, 0.5, 0.5, 0.5),
              Unemployment = c(0, 0, 0, 0))

fcast.up <- forecast(fit.consBest, newdata = newdata)