如何修复:来自等级缺陷拟合的预测可能具有误导性

348 阅读2分钟

你在R中可能遇到的一个常见警告是:

Warning message:
In predict.lm(model, df) :
  prediction from a rank-deficient fit may be misleading

可能出现这种警告的原因有两个:

原因1:两个预测变量是完全相关的。

原因2:你的模型参数多于数据集中的观测值。

下面的例子显示了每个问题在实践中可能发生的情况。

原因一:两个预测变量是完全相关的

假设我们在R中拟合了下面这个多元线性回归模型,并试图用它来进行预测。

#create data frame
df <- data.frame(x1=c(1, 2, 3, 4),
                 x2=c(2, 4, 6, 8),
                 y=c(6, 10, 19, 26))

#fit multiple linear regression model
model <- lm(y~x1+x2, data=df)

#use model to make predictions
predict(model, df)

   1    2    3    4 
 4.9 11.8 18.7 25.6 
Warning message:
In predict.lm(model, df) :
  prediction from a rank-deficient fit may be misleading

我们收到一条警告信息,因为预测变量x1和x2是完全相关的

请注意,x2的值仅仅等于x1的值乘以2。这是一个完美多线性的例子。

这意味着x1和x2在回归模型中不提供独特或独立的信息,这在拟合和解释模型时造成问题。

处理这个问题的最简单方法是简单地从模型中删除一个预测变量,因为在模型中同时存在两个预测变量是多余的。

原因之二:模型参数多于观测数据

假设我们在R中拟合了以下的多元线性回归模型,并试图用它来进行预测:

#create data frame
df <- data.frame(x1=c(1, 2, 3, 4),
                 x2=c(3, 3, 8, 12),
                 x3=c(4, 6, 3, 11),
                 y=c(6, 10, 19, 26))

#fit multiple linear regression model
model <- lm(y~x1*x2*x3, data=df)

#use model to make predictions
predict(model, df)

 1  2  3  4 
 6 10 19 26 
Warning message:
In predict.lm(model, df) :
  prediction from a rank-deficient fit may be misleading

我们收到一条警告信息,因为我们试图拟合一个共有七个模型系数的回归模型:

  • x1
  • x2
  • x3
  • x1*x2
  • x1*3
  • x2*x3
  • x1*x2*x3

然而,我们在数据集中总共只有四个观测值。

由于模型参数的数量大于数据集中的观测值的数量,我们将其称为高维数据

有了高维数据,就不可能找到一个能够描述预测变量和响应变量之间关系的模型,因为我们没有足够的观测值来训练模型。

解决这个问题的最简单方法是为我们的数据集收集更多的观测数据,或者使用一个系数较小的简单模型来估计。

其他资源

下面的教程解释了如何处理R中的其他常见错误:

如何处理:glm.fit:算法没有收敛
如何处理:glm.fit:拟合的概率在数值上出现0或1