【问题标题】:How to forecast y values using linear regression model on new x values如何在新 x 值上使用线性回归模型预测 y 值
【发布时间】:2019-05-08 15:35:19
【问题描述】:

我有一个多元线性回归模型:

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

假设 yabc 的历史时期是 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

现在我有了线性模型,我想使用 ab 的新数据来预测 y c 的时间段为 2017-2020,我们称它们为 a2b2c2

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

如何使用我之前的一组历史/实际数据(abc)中的线性模型,以及根据 x 的新值(a2b2c2)预测 y

我已经尝试使用 predict() 和 predict.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 

【问题讨论】:

  • predict 应该可以正常工作。能否请您显示您用来尝试predict 的代码?
  • 您究竟是如何尝试使用predict() 的?这应该是这项工作的正确功能。展示您的尝试并告诉我们为什么它看起来不正确。如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。带有“...”的数据不是很有帮助。
  • 如果具有 a2、b2 和 c2 的数据帧是 df2。我正在使用 predict.lm(model, newdata = df2)
  • @hanz 列名必须相同,否则不清楚哪些系数与哪些列匹配。

标签: r linear-regression forecasting stress-testing


【解决方案1】:

已更新以匹配添加的示例

新数据中的名称必须与旧数据/线性模型中的名称匹配。

使用更新后的示例,在运行 predict 之前使 df2 中的名称与 df 中的名称匹配。

names(df2) = c("a","b")
predict(model, newdata = df2)

【讨论】:

    猜你喜欢
    • 2016-08-26
    • 2020-12-06
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 2012-08-18
    • 2017-09-05
    • 1970-01-01
    • 2019-11-26
    相关资源
    最近更新 更多