Хорошо, у меня есть логистическая регрессия, и я использовал predict()
функцию для построения кривой вероятности на основе моих оценок.
## LOGIT MODEL:
library(car)
mod1 = glm(factor(won) ~ as.numeric(bid), data=mydat, family=binomial(link="logit"))
## PROBABILITY CURVE:
all.x <- expand.grid(won=unique(won), bid=unique(bid))
y.hat.new <- predict(mod1, newdata=all.x, type="response")
plot(bid<-000:1000,predict(mod1,newdata=data.frame(bid<-c(000:1000)),type="response"), lwd=5, col="blue", type="l")
Это здорово, но мне любопытно построить доверительные интервалы для вероятностей. Я пытался, plot.ci()
но не повезло. Может кто-нибудь указать мне на некоторые способы сделать это, предпочтительно с car
пакетом или базой R.
r
logistic
confidence-interval
ATMathew
источник
источник
Ответы:
Код, который вы использовали, оценивает модель логистической регрессии, используя
glm
функцию. Вы не включили данные, поэтому я просто сделаю некоторые.Модель логистической регрессии моделирует взаимосвязь между двоичной переменной ответа и, в этом случае, одним непрерывным предиктором. Результатом является логит-преобразованная вероятность как линейное отношение к предиктору. В вашем случае, результатом является двоичный ответ, соответствующий выигрышу или не выигрышу в азартной игре, и он прогнозируется значением ставки. Коэффициенты от
mod1
приведены в зарегистрированных коэффициентах (которые трудно интерпретировать), согласно:Чтобы преобразовать зарегистрированные шансы в вероятности, мы можем перевести вышеприведенное в
Вы можете использовать эту информацию для настройки сюжета. Во-первых, вам нужен диапазон переменной предиктора:
Затем, используя
predict
, вы можете получить прогнозы на основе вашей моделиОбратите внимание, что установленные значения также можно получить через
Указав
se.fit=TRUE
, вы также получите стандартную ошибку, связанную с каждым подобранным значением. В результатеdata.frame
получается матрица со следующими компонентами: подогнанные прогнозы (fit
), предполагаемые стандартные ошибки (se.fit
) и скалярный корень, дающий квадратный корень из дисперсии, используемой для вычисления стандартных ошибок (residual.scale
). В случае биномиального логит значение будет 1 (который вы можете увидеть, введяpreddat$residual.scale
вR
). Если вы хотите увидеть пример того, что вы уже рассчитали, вы можете напечататьhead(data.frame(preddat))
.Следующим шагом является настройка сюжета. Мне нравится сначала настраивать пустую область печати с параметрами:
Теперь вы можете увидеть, где важно знать, как рассчитать подобранные вероятности. Вы можете нарисовать линию, соответствующую подобранным вероятностям, следуя второй формуле выше. С помощью
preddat data.frame
вы можете преобразовать подогнанные значения в вероятности и использовать их для построения линии относительно значений вашей предикторной переменной.Наконец, ответьте на свой вопрос, доверительные интервалы могут быть добавлены к графику путем расчета вероятности для подобранных значений,
+/- 1.96
умноженных на стандартную ошибку:Результирующий график (из случайно сгенерированных данных) должен выглядеть примерно так:
Ради целесообразности, вот весь код в одном куске:
(Примечание. Это сильно отредактированный ответ в попытке сделать его более релевантным для stats.stackexchange.)
источник
se.fit
определяется переменная ?predict(..., se.fit=TRUE)
.Вот модификация решения @ smillig. Здесь я использую инструменты Tidyverse, а также
linkinv
функцию, являющуюся частью объекта модели GLMmod1
. Таким образом, вам не нужно вручную инвертировать логистическую функцию, и этот подход будет работать независимо от того, какой конкретный GLM вам подходит.источник