Линейная регрессия с использованием предикторов с задержкой по времени (независимых переменных) для целей прогнозирования - PullRequest
0 голосов
/ 01 ноября 2018

Я работаю над прогнозированием среднемесячного количества осадков в географическом регионе Индии (подразделения Ассам и Мегхалая). Для этой цели я использую в качестве независимых переменных (предикторов) данные среднемесячной средней температуры воздуха и данные среднемесячной относительной влажности (которые я извлек и пространственно усреднил из файла netCDF4 для этого географического региона, представленного на веб-сайте NOAA).

В целях прогнозирования я хочу смоделировать линейную регрессию с Осадком в качестве зависимой переменной, а данные «Температура воздуха» и «Относительная влажность» в качестве независимых переменных, чтобы они имели эффект регрессии во времени в регрессии .

Уравнение линейной регрессии должно выглядеть следующим образом:

Пожалуйста, перейдите по этой ссылке для уравнения

Здесь «Y» - осадки, «X» - температура воздуха, а «Z» - относительная влажность.

Образец «Данные обучения» выглядит следующим образом:

   ID       Time Precipitation Air_Temperature Relative_Humidity
1   1 1948-01-01           105        20.31194          81.64137
2   2 1948-02-01           397        21.21052          80.20120
3   3 1948-03-01           594        22.14363          81.94274
4   4 1948-04-01          2653        20.79417          78.89908
5   5 1948-05-01          7058        20.43589          82.99959
6   6 1948-06-01          5328        18.10059          77.91983
7   7 1948-07-01          4882        16.63936          76.25758
8   8 1948-08-01          3979        16.56065          76.89210
9   9 1948-09-01          2625        16.95542          76.80116
10 10 1948-10-01          2578        17.13323          75.62411

А сегмент «Тестовые данные» выглядит следующим образом:

        ID       Time Precipitation Air_Temperature Relative_Humidity
    1  663 2003-03-01           862        21.27210          79.77419
    2  664 2003-04-01          1812        20.44042          79.42500
    3  665 2003-05-01          1941        19.24267          79.57057
    4  666 2003-06-01          4981        18.53784          80.67292
    5  667 2003-07-01          4263        17.21581          79.97178
    6  668 2003-08-01          2436        16.88686          81.37097
    7  669 2003-09-01          2322        16.23134          77.63333
    8  670 2003-10-01          2220        17.40589          81.14516
    9  671 2003-11-01           131        19.01159          79.15000
    10 672 2003-12-01           241        20.86234          79.05847

Любая помощь будет принята с благодарностью. Спасибо!

1 Ответ

0 голосов
/ 01 ноября 2018

В ответ на ваше разъяснение в комментариях, вот один из многих способов получения лаговых переменных, используя функцию lag в dplyr (я также добавляю новую строку здесь для более позднего прогнозирования):

df %>%
   add_row(ID = 11, Time = "1948-11-01") %>%
   mutate(Air_Temperature_lagged = dplyr::lag(Air_Temperature, 1),
          Relative_Humidity_lagged = dplyr::lag(Relative_Humidity, 1)) -> df.withlags

Затем вы можете подобрать прямую линейную регрессию, используя lm, с Precipitation в качестве зависимой переменной и запаздывающими версиями двух других переменных в качестве предиктора:

precip.model <- lm(data = df.withlags, Precipitation ~ Air_Temperature_lagged + Relative_Humidity_lagged)

Затем вы можете применить свои коэффициенты к самым последним значениям в Air_Temperature и Relative_Humidity, чтобы спрогнозировать количество осадков на ноябрь 1948 года, используя функцию predict.

predict(precip.model, newdata = df.withlags)
  1        2        3        4        5        6        7        8        9       10       11 
  NA 2929.566 3512.551 3236.421 3778.742 2586.012 3473.482 3615.884 3426.378 3534.965 3893.255 

Модель предсказывает 3893.255.

Обратите внимание, что эта модель позволит вам прогнозировать только один период времени в будущем, поскольку у вас нет больше информации в ваших предикторах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...