#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))