r统计建模
R 报错:system is computationally singular(矩阵奇异)
回归的 X'X 矩阵不可逆。原因:完全共线(某个变量是其他变量的线性组合)、虚拟变量陷阱(所有类别都生成了哑变量)、样本量小于变量数、某个变量方差接近 0。
报错原文
Error in solve.default(X) : system is computationally singular: reciprocal condition number = 1.2e-18为什么会报这个错
回归的 X'X 矩阵不可逆。原因:完全共线(某个变量是其他变量的线性组合)、虚拟变量陷阱(所有类别都生成了哑变量)、样本量小于变量数、某个变量方差接近 0。
怎么解决
alias(fit) 或 car::vif(fit) 找共线变量;哑变量只保留 k-1 个;检查是否有常数列;样本太少就减变量。数值量纲差异大时先 scale()。
代码示例
fit <- lm(y ~ ., data = df)
alias(fit)
car::vif(fit)
# 去掉常数列
df <- df[, sapply(df, function(c) length(unique(c)) > 1)]
# 标准化后重估
df_z <- as.data.frame(scale(df))
lm(y ~ ., data = df_z)同工具的其他报错
报错解决了,但方法还没搞懂?
报错只是表象。因果推断、面板数据、稳健性检验这些方法背后的逻辑,知识库里按「原理 × 直觉 × 代码」讲清楚了。
进入知识库 →