Как прогнозировать значения y с использованием модели линейной регрессии для новых значений x - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть многомерная модель линейной регрессии:

model <- lm(y ~ a + b + c, data = df)

Допустим, исторический период для y , a , b , c - это квартальные данные за 2000-2017 гг.

Date    y    a    b    c
2000Q1  2    1.5  1.3  8.1
2000Q2  2.3  1.8  1.2  7.6
.       .    .    .    .
.       .    .    .    .
.       .    .    .    .
.       .    .    .    .
2017Q4  8.7  3.5  5.6  3.2

Теперь, когда у меня есть линейная модель, я хочу прогнозировать y , используя новые данные для a , b и c с периодом 2017-2020 гг., Давайте называть их a2 , b2 и с2 .

Date    a2   b2   c2
2017Q4  3.5  5.6  3.2
2018Q1  4.1  6.3  3.0
.       .    .    .
.       .    .    .
.       .    .    .
2020Q4  5.6  7.8  2.2

Как использовать линейную модель из моего предыдущего набора исторических / фактических данных ( a , b и c ) и прогноз y относительно новых значений x ( a2 , b2 и c2 )?

Я пытался использовать функции предиката () и предиката.lm (), однако ничто не дает мне результатов, которые я ищу.Я могу вручную ввести линейную модель и создать эти прогнозы, но я уверен, что есть более эффективный способ сделать это.

Обновление

Вот небольшой пример того, что я делаю:

df <- data.frame(y = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
                 a = c(2, 2.3, 2.6, 2.9, 2.4, 2.6, 3.0, 3.2, 3.9, 3.7),
                 b = c(9, 8.7, 9.1, 7.8, 8.2, 8, 6.9, 7.8, 9.1, 5.7))

attach(df)

model <- lm(y ~ a + b)

df2 <- data.frame(a2 = c(3.7, 4.0, 5.2, 5.6, 5.8, 6),
              b2 = c(5.7, 5.5, 5.3, 5.1, 4.9, 4.7))

predict(model, newdata = df2)

И я продолжаю получать результаты обычной модели с предупреждением:

1         2         3         4         5         6         7         8         
9        10 
 1.409122  2.807886  3.690647  5.826560  3.569001  4.501510  6.882534  
7.004180  8.793667 10.514892 
Warning message:
'newdata' had 6 rows but variables found have 10 rows 

1 Ответ

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

Обновлен в соответствии с добавленным примером

Имена в новых данных должны совпадать с именами в старой модели данных / линейной модели.

Используя ваш обновленный пример, приведите имена в df2 в соответствие с именами в df, прежде чем запускать предикат.

names(df2) = c("a","b")
predict(model, newdata = df2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...