在model.frame.default(Terms,newdata,na.action=na.action,xlev=object$xlevels)中不断获取错误:因子sub有新的级别
我试图根据人力资源数据做一个线性回归。我不断得到错误,我的因子subc有了新的水平 我是超级新手,所以如果我犯了任何明显的错误,我道歉!提前谢谢你,我真的迷路了,绝望了 这是我用来这样做的代码。Dat是我的数据帧名称,commons和techs是指类似于CloseFriendsG1的其他列在model.frame.default(Terms,newdata,na.action=na.action,xlev=object$xlevels)中不断获取错误:因子sub有新的级别,r,regression,R,Regression,我试图根据人力资源数据做一个线性回归。我不断得到错误,我的因子subc有了新的水平 我是超级新手,所以如果我犯了任何明显的错误,我道歉!提前谢谢你,我真的迷路了,绝望了 这是我用来这样做的代码。Dat是我的数据帧名称,commons和techs是指类似于CloseFriendsG1的其他列 commons<-grep("^C",rownames(dat),value=TRUE) type_q=rep("Common",dim(dat)[1]) type_q[techs]="Technica
commons<-grep("^C",rownames(dat),value=TRUE)
type_q=rep("Common",dim(dat)[1])
type_q[techs]="Technical"
dat$totals<-rowSums(dat[,techs])+rowSums(dat[,commons])
head(dat)
set.seed(2016)
Train=sample(1:156,110,replace=FALSE)
ModTrain<-lm(totals~.,data=dat[Train,])
ModTest<-predict(ModTrain,newdata=dat[-Train,])``
commons添加一点解释,您的列id
很可能是一个唯一的条目,当您执行totals~。
时,您将针对除totals
之外的所有列进行回归。如果每个id
因子只有一个观察值,则无法对其进行估计,且回归为。。胡说八道:
da = data.frame(id=factor(1:10),x=runif(10),y=runif(10),z=runif(10))
trn = 1:5
mod = lm(y ~ .,data=da[trn,])
summary(mod)
Call:
lm(formula = y ~ ., data = da[trn, ])
Residuals:
ALL 5 residuals are 0: no residual degrees of freedom!
Coefficients: (2 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.48208 NA NA NA
id2 0.11749 NA NA NA
id3 0.01146 NA NA NA
id4 -0.29586 NA NA NA
id5 0.34529 NA NA NA
x NA NA NA NA
z NA NA NA NA
您可以在进行模型拟合时将其删除:
mod = lm(y ~ .,data=da[trn,-1])
predict(mod,da[-trn,])
6 7 8 9 10
0.2992070 1.2727160 0.7789787 0.6585381 0.4227041
例如,使用lm(totals~,data=dat[Train,-1])
或lm(totals~,data=dat[Train,!grepl(“subc”,colname(dat)))
。id是否在用于预测的data.frame中并不重要。您可以将sub
作为一个预测器来实现。从数据框中删除sub
。