如何操纵R中的GLM系数?

时间:2011-10-22 19:29:16

标签: r

如何操纵GLM对象以绕过此错误?我希望预测将看不见的水平视为基本情况(即给它们系数为零。)

> master <- data.frame(x = factor(floor(runif(100,0,3)), labels=c("A","B","C")), y = rnorm(100))
> part.1 <- master[master$x == 'C',]
> part.2 <- master[master$x == 'A' | master$x == 'B',]
> model.2 <- glm(y ~ x, data=part.2)
> predict.1 <- predict(model.2, part.1)
Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) : factor 'x' has new level(s) C

我试过这样做:

> model.2$xlevels$x <- c(model.2$xlevels, "C")
> predict.1 <- predict(model.2, part.1)

但它没有正确评分模型:

> predict.1[1:5]
         2          3          6          8         10 
0.03701494 0.03701494 0.03701494 0.03701494 0.03701494 
> summary(model.2)

Call:
glm(formula = y ~ x, data = part.2)
<snip>
Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)  0.12743    0.18021   0.707    0.482
xB          -0.09042    0.23149  -0.391    0.697

predict.1应该只有0.12743。

这显然只是一个精简版本 - 我的真实模型中有25个左右的变量,所以predict.1 <- rep(length(part.1), 0.12743)的答案对我没用。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

如果您知道那些x =='C'的行为与x =='A'完全相同,那么您可以这样做:

> part.1$x <- factor(rep("A",nrow(part.1)),levels=c("A","B"))
> predict(model.2, part.1)

将为您提供纯粹的拦截模型。

答案 1 :(得分:0)

我不同意你应该期待任何预测。你开发了一个没有项目的模型,其x变量是一个值为“C”的因子,所以你不应该期望任何预测。您为1:5生成预测的努力也应该失败。