你在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中的其他常见错误: