R语言lm()无严重共线性却出现系数因奇异性未定义问题
问题原因:四个预测变量存在完全线性依赖,属于精确的奇点问题,和你理解的“接近完全共线性”是两类情况
你构造的变量隐含了精确的线性等式关系:
- 按study拆分X时,天然满足
X = X_btw_study + X_wthn_study - 按outcome拆分X时,天然满足
X = X_btw_outcome + X_wthn_outcome
联立两个等式就能推导得到:X_wthn_outcome = X_btw_study + X_wthn_study - X_btw_outcome
也就是说X_wthn_outcome可以完全由另外三个预测变量的线性组合表示,没有额外的独立信息,这就导致线性回归的设计矩阵秩亏,R的lm()会直接返回冗余变量的系数为NA。
你看到的两两相关系数最高只有0.71、没有接近1的情况,是因为两两相关只能检测两个变量之间的线性相关性,无法检测三个及以上变量组合形成的完全线性依赖,才会造成“无共线性”的误判。
验证方法
你可以运行以下代码直接验证两个变量的完全一致性:
dat$test <- dat$X_btw_study + dat$X_wthn_study - dat$X_btw_outcome cor(dat$test, dat$X_wthn_outcome) # 输出结果为1,完全相关
解决方案
如果是要做分层的中心化分析,你需要调整变量构造逻辑,避免出现完全线性冗余的变量;如果是要固定study和outcome的效应,可以直接把分类变量加入模型,不需要手动拆分组间组内项。
内容的提问来源于stack exchange,提问作者Reza
相关产品推荐
相关产品推荐

