Как я могу манипулировать коэффициентами GLM в R? - PullRequest
0 голосов
/ 22 октября 2011

Как я могу манипулировать объектом 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

Предсказание 1 должно быть только 0,12743.

Это, очевидно, просто урезанная версия - моя реальная модель содержит около 25 переменных, поэтому ответ predict.1 <- rep(length(part.1), 0.12743) мне не нужен.

Спасибо за любую помощь!

Ответы [ 2 ]

1 голос
/ 23 октября 2011

Если вы знаете , что наблюдения, где x == 'C' ведут себя точно так же, как x == 'A', то вы можете просто сделать:

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

, которая даст вам вашу чистую модель перехвата.

0 голосов
/ 23 октября 2011

Я не согласен, что вы должны ожидать какого-либо прогноза. Вы разрабатываете модель без элементов, чья переменная x является фактором, значение которого равно «C», поэтому вам не следует ожидать никаких прогнозов. Ваши усилия по созданию прогнозов на 1: 5 также должны потерпеть неудачу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...