我有两个数据框(df1和df2):
DF1:
dependent factor
4 a
4 b
3 b
8 c
3 d
5 e
6 e
2 a
DF2:
dependent factor
2 f
5 d
3 e
9 e
5 g
2 e
即:
df1<-data.frame(dependent=c(4,4,3,8,3,5,6,2),factor=as.factor(c("a","b","b","c","d","e","e","a")))
df2<-data.frame(dependent=c(2,5,3,9,5,2),factor=as.factor(c("f","d","e","e","g","e")))
df1中的数据用于估计线性回归的参数估计值:
reg<-lm(formula=dependent~factor,df1)
结果是:
> coef(reg)
(Intercept) factorb factorc factord factore
3.0 0.5 5.0 0.0 2.5
通过使用这些估计,我想预测df2的因变量。但是df2 $因子有两个新的因子水平&#34; f&#34;和&#34; g&#34;。所以功能:
predict(reg,df2)
给出了这样的错误:
Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) :
factor factor has new levels f, g
对于新级别,我想将其因子值分配为&#34; 0&#34;。我怎样才能做到这一点?有没有办法做到这一点?我的真实数据要复杂得多。我有更多的因子变量,其中每个都可以在第二个数据帧中有新的级别。我会很高兴得到任何帮助。非常感谢。
答案 0 :(得分:0)
将新系数的系数设置为0意味着预测将等于截距(请参阅df1
预测值中斜率为0的水平如何等于截距)。这意味着您只需要用截距替换这些值。
我添加了@ lukeA的代码,为df2
生成以下预测:
pred=predict(reg,df2[!df2$factor %in% setdiff(levels(df2$factor), levels(df1$factor)), ])
ifelse(rownames(df2) %in% attr(pred,"names"), pred, reg$coefficients[1])
# [1] 3.0 5.5 5.5 5.5 3.0 5.5