Rozważ poniższy wykres, w którym symulowałem dane, w następujący sposób. Patrzymy na wynik binarny dla którego prawdziwe prawdopodobieństwo bycia 1 wskazuje czarna linia. Zależność funkcjonalna między współzmienną i jest wielomianem trzeciego rzędu z łączem logistycznym (więc jest nieliniowa w podwójnym kierunku).
Zielona linia to dopasowanie regresji logistycznej GLM, gdzie jest wprowadzany jako wielomian trzeciego rzędu. Przerywane zielone linie to 95% przedziały ufności wokół prognozy , gdzie dopasowane współczynniki regresji. Użyłem i do tego.R
glm
predict.glm
Podobnie linia pruple jest średnią z odcinka tylnego z 95% wiarygodnym przedziałem dla bayesowskiego modelu regresji logistycznej z użyciem jednolitego wcześniejszego. Użyłem do tego pakietu z funkcją (ustawienie daje jednolity nieinformacyjny wcześniej).MCMCpack
MCMClogit
B0=0
Czerwone kropki oznaczają obserwacje w zbiorze danych, dla których , czarne kropki to obserwacje z . Zauważ, że jak często w klasyfikacji / analizie dyskretnej obserwuje się ale nie .
Można zobaczyć kilka rzeczy:
- Celowo zasymulowałem, że jest rzadki na lewej ręce. Chcę, aby pewność siebie i wiarygodny przedział stały się tutaj szerokie z powodu braku informacji (obserwacji).
- Oba przewidywania są tendencyjne w górę po lewej stronie. Ten błąd jest spowodowany czterema czerwonymi punktami oznaczającymi obserwacje, co błędnie sugeruje, że trafiłaby tutaj prawdziwa funkcjonalna forma. Algorytm nie ma wystarczających informacji, aby stwierdzić, że prawdziwa funkcjonalna forma jest wygięta w dół.
- Przedział ufności zwiększa się zgodnie z oczekiwaniami, natomiast przedział wiarygodności nie . W rzeczywistości przedział ufności obejmuje całą przestrzeń parametrów, tak jak powinno to wynikać z braku informacji.
Wygląda na to, że wiarygodny przedział jest niewłaściwy / zbyt optymistyczny dla części . To naprawdę niepożądane zachowanie, aby wiarygodny przedział był wąski, gdy informacje stają się rzadkie lub całkowicie nieobecne. Zwykle nie tak reaguje wiarygodny interwał. Czy ktoś może wyjaśnić:
- Jakie są tego powody?
- Jakie kroki mogę podjąć, aby uzyskać bardziej wiarygodny odstęp? (tzn. taki, który zawiera co najmniej prawdziwą formę funkcjonalną, lub lepiej staje się tak szeroki jak przedział ufności)
Kod umożliwiający uzyskanie przedziałów predykcji w grafice jest wydrukowany tutaj:
fit <- glm(y_obs ~ x + I(x^2) + I(x^3), data=data, family=binomial)
x_pred <- seq(0, 1, by=0.01)
pred <- predict(fit, newdata = data.frame(x=x_pred), se.fit = T)
plot(plogis(pred$fit), type='l')
matlines(plogis(pred$fit + pred$se.fit %o% c(-1.96,1.96)), type='l', col='black', lty=2)
library(MCMCpack)
mcmcfit <- MCMClogit(y_obs ~ x + I(x^2) + I(x^3), data=data, family=binomial)
gibbs_samps <- as.mcmc(mcmcfit)
x_pred_dm <- model.matrix(~ x + I(x^2) + I(x^3), data=data.frame('x'=x_pred))
gibbs_preds <- apply(gibbs_samps, 1, `%*%`, t(x_pred_dm))
gibbs_pis <- plogis(apply(gibbs_preds, 1, quantile, c(0.025, 0.975)))
matlines(t(gibbs_pis), col='red', lty=2)
Dostęp do danych : https://pastebin.com/1H2iXiew dzięki @DeltaIV i @AdamO
dput
w ramce danych zawierającej dane, a następnie dołączyć dput
dane wyjściowe jako kod w swoim poście.