问题描述
我正在为一个项目制作岭回归模型。我的 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)