为什么线性回归无法预测简单确定性序列的结果?

机器算法验证 r 回归 流明
2022-03-23 05:19:14

我的一位同事向我发送了这个问题,显然是在互联网上流传:

If $3 = 18, 4 = 32, 5 = 50, 6 = 72, 7 = 98$, Then, $10 =$ ?

答案似乎是 200。

3*6  
4*8  
5*10  
6*12  
7*14  
8*16  
9*18  
10*20=200  

当我在 R 中进行线性回归时:

data     <- data.frame(a=c(3,4,5,6,7), b=c(18,32,50,72,98))  
lm1      <- lm(b~a, data=data)  
new.data <- data.frame(a=c(10,20,30))  
predict  <- predict(lm1, newdata=new.data, interval='prediction')  

我得到:

  fit      lwr      upr  
1 154 127.5518 180.4482  
2 354 287.0626 420.9374  
3 554 444.2602 663.7398  

所以我的线性模型预测10=154

当我绘制数据时,它看起来是线性的……但显然我假设了一些不正确的东西。

我正在尝试学习如何在 R 中最好地使用线性模型。分析这个系列的正确方法是什么?我哪里做错了?

3个回答

回归模型,例如拟合模型lm()隐含地假设基础数据生成过程是概率性的。您假设您尝试建模的规则是确定性的。因此,您尝试做的事情与您尝试做的方式之间存在不匹配。

还有其他软件(即不是 R)明确设计用于查找/拟合确定性数据的最简单函数(例如Eureqa)。可能有一个 R 包(我不知道),但 R 旨在用于概率数据的统计建模。

至于lm()给你的答案,它看起来很合理,并且可能是正确的。然而,我收集到提出这个问题的上下文强烈暗示它应该被理解为确定性的。如果情况并非如此,并且您想知道拟合是否合理,您可能会注意到一件事是两个极端数据点位于回归线之上,而中间数据都在回归线之下。这表明错误指定的功能形式。这也可以在残差与拟合图( plot(lm1, which=1) 中看到:

在此处输入图像描述

至于@AlexWilliams 拟合的模型,它看起来好多了:

在此处输入图像描述

趋势是二次而非线性的。尝试:

lm1 <- lm(b~I(a^2), data=data)

更新:这是代码。

data <- data.frame(a=c(3,4,5,6,7),b=c(18,32,50,72,98))
lm1 <- lm(b~I(a^2), data=data)
new.data <- data.frame(a=c(10,20,30))
predict(lm1, newdata = new.data, interval='prediction')

并输出:

   fit  lwr  upr
1  200  200  200
2  800  800  800
3 1800 1800 1800

对于 Alex Williams 和 gung 给出的出色答案,我犹豫不决,但我认为还有一点需要说明。该问题使用短语“线性回归”和“线性模型”,可能表明它们的含义相同。但是,“线性回归”的通常含义是指经典线性回归模型(CLRM),其中“线性”表示“参数线性”。这是参数的条件,而不是自变量的条件。所以一个二次模型,例如:

Yi=β1+β2Xi2

在 CLRM 的意义上仍然是线性的,因为它在参数中是线性的。相比之下,模型:β1β2

Yi=β1+β2Xi

在其参数中是线性的,并且在中也是线性的。与其称其为线性模型,更准确的说法是它的参数是线性的并且具有线性函数形式。因此可以说,如果该序列具有二次函数形式(如 Alex Williams 所示),则可以通过参数为线性的模型来分析该级数,但不能通过具有线性函数形式的模型来分析。Xi