多元线性回归‘nonconformable argument’错误排查及外推判断
问题解答
1. 矩阵乘法错误的原因
错误non-conformable arguments的核心是矩阵维度不匹配:
- 你用
step()做了逐步回归,model1已经自动剔除了部分不显著的预测变量,最终模型的变量数量少于原始的7个预测变量+截距。 - 你手动构造的
newx包含了截距+7个原始变量(共8个元素),但model.matrix(model1)生成的设计矩阵X的列数是截距+保留的变量数,两者长度不一致,导致矩阵乘法无法执行。
解决方法:
- 先通过
formula(model1)或summary(model1)查看model1最终保留的变量 - 按照保留的变量顺序,重新构造包含截距的
newx向量,确保其长度和X的列数完全一致
更简便的正确写法(自动匹配变量):
# 构造新数据框 new_data <- data.frame( Age = 35, AverageDrive = 287, DrivingAccuracy = 64, GreensonRegulation = 64.9, AverageNumofPutts = 1.778, SavePercent = 48, NumEvents = 26 ) # 生成适配model1的设计矩阵(自动忽略被剔除的变量) new_x <- model.matrix(formula(model1), new_data) # 计算杠杆值 lev <- t(new_x) %*% solve(t(model.matrix(model1)) %*% model.matrix(model1)) %*% new_x
2. 预测是否属于外推的判断方法
判断外推的核心是看新球员的预测变量是否超出训练集pga的变量取值范围:
- 对每个预测变量,计算训练集中的最小值和最大值(比如用
sapply(pga[, c("Age", "AverageDrive", ...)], range)) - 如果新球员的任意一个变量值超出对应训练集的min-max区间,这个预测就属于外推——因为模型从未在该变量的这个取值区间内学习过,预测可靠性会下降
- 如果所有变量都在训练集的取值范围内,就是内插预测,可靠性相对更高
内容的提问来源于stack exchange,提问作者Heather S.
相关产品推荐
相关产品推荐

