用线性回归中的手动值替换新的因子水平

时间:2015-03-29 10:22:52

标签: r

我有两个数据框(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;。我怎样才能做到这一点?有没有办法做到这一点?我的真实数据要复杂得多。我有更多的因子变量,其中每个都可以在第二个数据帧中有新的级别。我会很高兴得到任何帮助。非常感谢。

1 个答案:

答案 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