矩阵与 R 中训练集大小不匹配的错误

问题描述

我正在为一个项目制作岭回归模型。我的 trainLed 数据集有 2055 个 obs 的 21 个变量,Lifeexpectancy 是我正在研究的一个。当我使用下面的代码时,我的 train.mat 只有 1917 并且在尝试运行岭回归代码时收到错误消息。我该怎么做才能获得匹配的观察数?

代码

train.mat = model.matrix(Lifeexpectancy~.,data=trainLed)


test.mat = model.matrix(Lifeexpectancy~.,data=testLed)

grid = 10^seq(4,-2,length = 120)

fit.ridge = glmnet(train.mat,trainLed$Lifeexpectancy,alpha=0,lambda=grid,thresh=1e-12) 

运行第 4 行时出错
glmnet(train.mat,alpha = 1,lambda = grid,中的错误: y (2055) 中的观察数不等于 x (1917) 的行数

解决方法

您收到该错误是因为您的一些自变量是 NA,而 model.matrix() 将跳过这些行。

例如,我们使用来自不同列的 100 个 NA 制作了一个类似的数据集,我得到了相同的错误:

trainLed = data.frame(matrix(rnorm(2055*11),ncol=11))
colnames(trainLed) = c(paste0("var",1:10),"Lifeexpectancy")
trainLed$var1[1:50] = NA
trainLed$var2[51:100] = NA

train.mat = model.matrix(Lifeexpectancy~.,data=trainLed)
fit.ridge = glmnet(train.mat,trainLed$Lifeexpectancy,alpha=0)

Error in glmnet(train.mat,alpha = 0) : 
  number of observations in y (2055) not equal to the number of rows of x (1955)

子集您的数据以获得完整的观察:

trainLed = trainLed[complete.cases(trainLed),]
train.mat = model.matrix(Lifeexpectancy~.,alpha=0)