#r #glm
#r #glm
Вопрос:
Я пытаюсь разобраться в том, что функция predict.glm () делает для проекта на работе, который ее использует.
Чтобы сделать это, я сначала посмотрел на пример кода, найденный в документации для ?predict.glm(). Это дало мне ощущение, что он может использовать glm и предсказывать значения ответа для данного входного вектора. Однако мне было очень сложно настроить этот пример «budworm». Итак, я создал исключительно простую собственную модель, чтобы попробовать и посмотреть, как это работает. Спойлер — я все еще не могу заставить его работать.
a<-c(1,2,3,4,5)
b<-c(2,3,4,5,6)
result<-glm(b~a,family=gaussian)
summary(result)
plot(c(0,10), c(0,10), type = "n", xlab = "dose",
ylab = "response")
xvals<-seq(0,10,0.1)
data.frame(xinputs=xvals)
predict.glm(object=result,newdata= data.frame(xinputs=xvals),type='terms')
#lines(xvals, predict.glm(object=result,newdata = xvals, type="response" ))
При запуске predict.glm(object=result,newdata= data.frame(xinputs=xvals),type='terms')
я получаю сообщение об ошибке:
Warning message:
'newdata' had 101 rows but variables found have 5 rows
Насколько я понимаю, не должно иметь значения, что входной GLM использовал только 5 строк… он должен использовать статистику этого GLM для прогнозирования значений ответа для каждой из 101 записи новых данных?
Ответ №1:
Имена столбцов во newdata
фрейме данных должны совпадать с именами столбцов из данных, которые вы использовали для соответствия модели. Таким образом,
predict.glm(object=result,newdata= data.frame(a=xvals),type='terms')
решит вашу проблему.
a <- c(1, 2, 3, 4, 5)
b <- c(2, 3, 4, 5, 6)
result <- glm(b ~ a, family = gaussian)
summary(result)
#>
#> Call:
#> glm(formula = b ~ a, family = gaussian)
#>
#> Deviance Residuals:
#> 1 2 3 4 5
#> -1.776e-15 -8.882e-16 -8.882e-16 0.000e 00 0.000e 00
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 1.000e 00 1.317e-15 7.591e 14 <2e-16 ***
#> a 1.000e 00 3.972e-16 2.518e 15 <2e-16 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> (Dispersion parameter for gaussian family taken to be 1.577722e-30)
#>
#> Null deviance: 1.0000e 01 on 4 degrees of freedom
#> Residual deviance: 4.7332e-30 on 3 degrees of freedom
#> AIC: -325.47
#>
#> Number of Fisher Scoring iterations: 1
plot(c(0, 10),
c(0, 10),
type = "n",
xlab = "dose",
ylab = "response")
xvals <- seq(0, 10, 0.1)
head(data.frame(xinputs = xvals))
#> xinputs
#> 1 0.0
#> 2 0.1
#> 3 0.2
#> 4 0.3
#> 5 0.4
#> 6 0.5
head(predict.glm(object = result,
newdata = data.frame(a = xvals),
type = 'terms'))
#> a
#> 1 -3.0
#> 2 -2.9
#> 3 -2.8
#> 4 -2.7
#> 5 -2.6
#> 6 -2.5
Создано 2020-09-15 пакетом reprex (версия 0.3.0)