Как выполнить обратное преобразование коэффициентов glm для построения результатов?

#r #plot #glm #coefficients

Вопрос:

Итак, у меня есть glm с двумя переменными-предикторами и одним ответом, и мне нужно преобразовать оценки обратно, чтобы, когда я добавляю их на свой график, они были в том же масштабе, что и мои данные. Мне было сказано создать объект из предсказанных значений, как показано на рисунке:

 b0 <- #estiamte for intercept
b1 <- #estimate for first coeefficient
b2 <- #estimate for second coefficient

predicted.values <- b0   data$firstpredictor * b1   data$secondpredictor * b2
 

Проблема, с которой я сталкиваюсь, заключается в том, что мой второй предиктор является факторной переменной, и поэтому я получаю код ошибки, поскольку умножать коэффициент бессмысленно.

Комментарии:

1. Если вы подходите по умолчанию glm и secondpredictor являетесь фактором, я думаю b2 , что не может быть одного числа.

Ответ №1:

Вот пример с iris данными.

Я пропустил двухуровневый коэффициент, для которого в этом случае может быть указан только один коэффициент secondpredictor .

Я буду использовать модель fit <- glm(Sepal.Length ~ Sepal.Width Species, data = iris) и Species фактор с тремя уровнями.

 fit

Call:  glm(formula = Sepal.Length ~ Sepal.Width   Species, data = iris)

Coefficients:
      (Intercept)        Sepal.Width  Speciesversicolor   Speciesvirginica  
           2.2514             0.8036             1.4587             1.9468  

Degrees of Freedom: 149 Total (i.e. Null);  146 Residual
Null Deviance:      102.2 
Residual Deviance: 28   AIC: 183.9
 

Как вы можете видеть в этой модели, b0 есть 2.2514 , b1 есть 0.8036 и b2 есть 1.4587 или 1.9468 зависит от Species этого .

Давайте взглянем на первый образец iris , iris[1,]

   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
 

А также, это прогнозируемое значение( predict(fit, iris[1,]) ) равно 5.063856 .

Обратите Species setosa внимание, что это то, что является базовым для этой категориальной переменной.

Затем прогнозируемые значения могут быть рассчитаны вручную с помощью 2.2513932 3.5*0.8035609 0 или fit$coefficients[1] 3.5 * fit$coefficients[2] .

Затем, чтобы справиться с другим фактором, вы можете достичь этого с помощью

 fit$coefficients[1]   iris$Sepal.Width * fit$coefficients[2]   fit$coefficients[3]  * (iris$Species == "versicolor")   fit$coefficients[4] * (iris$Species == "virginica")
 

Вы можете проверить этот результат с помощью

 predicted.iris - predict(fit, iris)
 

или

 var(predicted.iris - predict(fit, iris))