Wykorzystanie przesunięcia w modelu dwumianowym w celu uwzględnienia zwiększonej liczby pacjentów

18

Dwa powiązane ze mną pytania. Mam ramkę danych, która zawiera liczbę pacjentów w jednej kolumnie (zakres od 10 do 17 pacjentów) oraz 0 i 1 zera pokazujące, czy zdarzenie miało miejsce tego dnia. Używam modelu dwumianowego do regresji prawdopodobieństwa incydentu na liczbę pacjentów. Chciałbym jednak dostosować się do faktu, że gdy będzie więcej pacjentów, nieuchronnie będzie więcej incydentów, ponieważ łączna ilość czasu pobytu pacjenta na oddziale jest wyższa w tym dniu.

Więc używam przesuniętego modelu dwumianowego takiego jak ten (kod R):

glm(Incident~Numbers, offset=Numbers, family=binomial, data=threatdata)

Moje pytania to:

  1. Czy dobrze jest mieć dokładnie te same zmienne przewidujące i przesunięte? Chcę częściowo zredukować toniczny wzrost prawdopodobieństwa incydentu i sprawdzić, czy w ogóle coś zostało. Ma to dla mnie sens, ale jestem trochę ostrożny na wypadek, gdy się mylę.

  2. Czy przesunięcie jest określone poprawnie? Wiem, że w modelach Poissona czytałby

    offset=log(Numbers)
    

Nie wiem, czy jest tu odpowiednik i nie mogę znaleźć żadnego dwumianowego przesunięcia w Google (głównym problemem jest to, że ciągle otrzymuję dwumianowy ujemny, co oczywiście nie jest dobre).

Chris Beeley
źródło
2
Czy to nie to, co chcesz dostosować, a dokładnie to, co chcesz zmierzyć - tj. Jak prawdopodobieństwo „incydentu” rośnie wraz z liczbą pacjentów?
B_Miner
1
Muszę powtórzyć punkt B_Minera. Myślę, że jesteś zdezorientowany, kiedy / dlaczego zastosowano przesunięcie w tej sytuacji. Twój model, bez przesunięcia, da ci dopasowane wartości prawdopodobieństwa incydentu w zależności od liczby pacjentów. Jeśli interesuje Cię inna forma funkcjonalna, rozważ transformacje (takie jak log lub potęgowanie #) w oparciu o to, co jest interesujące z naukowego punktu widzenia.
AdamO,
Czy możesz wyjaśnić coś na temat incydentów? Czy incydent związany jest z pacjentem, czy może jest związany z całym oddziałem? Jeśli jest to związane z pacjentami, czy możliwe jest wystąpienie> 1 incydentu. Jeśli nie ma pacjentów, czy incydent nie jest możliwy?
atiretoo
1
Najwyraźniej moja odpowiedź „nie zawiera wystarczającej ilości szczegółów”. Podałem teoretyczny rozwój, kod, który można uruchomić i odpowiedzi na oba pytania, więc czy możesz wyjaśnić, czego więcej potrzeba?
conjugateprior
1
Przepraszamy, Conjugate Prior, twoja odpowiedź jest świetna. Rzeczą „niewystarczająco szczegółową” był tag dodany do nagrody (tj. Był tam przed opublikowaniem). Przyjmuję do wiadomości, że nagroda się skończy na wypadek, gdyby ktoś zareagował jeszcze lepiej, ale to mało prawdopodobne, a twoja jest bardzo pomocna, dziękuję.
Chris Beeley

Odpowiedzi:

17

Jeśli jesteś zainteresowany prawdopodobieństwem incydentu biorąc pod uwagę N dni pacjentów na oddziale, to potrzebujesz modelu takiego jak:

mod1 <- glm(incident ~ 1, offset=patients.on.ward, family=binomial)

przesunięcie reprezentuje próby, incidentwynosi 0 lub 1, a prawdopodobieństwo incydentu jest stałe (brak niejednorodności w tendencji do generowania incydentów) i pacjenci nie wchodzą w interakcje, aby powodować incydenty (brak zarażenia). Alternatywnie, jeśli szansa na incydent jest niewielka, co jest dla ciebie (lub przekroczyłeś liczbę incydentów, nie wspominając nam o tym), możesz preferować sformułowanie Poissona

log.patients.on.ward <- log(patients.on.ward)
mod2 <- glm(incident ~ 1, offset=log.patients.on.ward, family=poisson)

gdzie mają zastosowanie te same założenia. Przesunięcie jest rejestrowane, ponieważ liczba pacjentów na oddziale ma proporcjonalny / multiplikatywny efekt.

Rozwijając drugi model, być może uważasz, że jest więcej incydentów, niż można by się spodziewać po prostu ze względu na większą liczbę pacjentów. Oznacza to, że być może pacjenci wchodzą w interakcje lub są heterogenni. Więc spróbuj

mod3 <- glm(incident ~ 1 + log.patients.on.ward, family=poisson)

Jeśli współczynnik na log.patients.on.wardjest znacząco różny od 1, w którym został ustalony mod2, to może być coś złego w twoich założeniach o niejednorodności i zarażeniu. I chociaż nie możesz oczywiście rozróżnić tych dwóch (ani jednej z pozostałych brakujących zmiennych), masz teraz oszacowanie, o ile zwiększenie liczby pacjentów na oddziale zwiększa odsetek / prawdopodobieństwo wystąpienia incydentów ponad to, co chciałbyś oczekiwać od przypadku. W przestrzeni parametrów jest to 1-coef(mod3)[2]przedział wyprowadzany z confint.

Alternatywnie możesz po prostu pracować bezpośrednio z ilością kłody i jej współczynnikiem. Jeśli chcesz tylko przewidzieć prawdopodobieństwo incydentu na podstawie liczby pacjentów na oddziale, ten model byłby prostym sposobem na zrobienie tego.

Pytania

  1. Czy można przesuwać zmienne zależne? Wydaje mi się to bardzo złym pomysłem, ale nie widzę, że musisz.

  2. Przesunięcie w modelach regresji Poissona exposurejest rzeczywiście log(exposure). Być może mylące jest zastosowanie offsetw modelach regresji dwumianowej R. jest w zasadzie sposobem na wskazanie liczby prób. Zawsze można go zastąpić zmienną zależną zdefiniowaną jako cbind(incidents, patients.on.ward-incidents)i bez przesunięcia. Pomyśl o tym w ten sposób: w modelu Poissona wchodzi on po prawej stronie za funkcją łączenia logów, aw modelu dwumianowym - po lewej stronie przed funkcją linkowania logów.

sprzężonyprior
źródło
18

Przesunięcia w regresjach Poissona

Zacznijmy od tego, dlaczego używamy przesunięcia w regresji Poissona. Często chcemy to przypisać kontroli narażenia. Niech będzie stopą bazową na jednostkę ekspozycji, a t będzie czasem ekspozycji w tych samych jednostkach. Oczekiwana liczba zdarzeń wyniesie λ × t .λtλ×t

W modelu GLM modelujemy oczekiwaną wartość za pomocą funkcji link , to znaczyg

g(λti)=log(λti)=β0+β1x1,i+

tiixii

Możemy uprościć uproszczenie powyższego wyrażenia

log(λ)=log(ti)+β0+β1x1,i+

log(ti)

Regresja dwumianowa

W regresji dwumianowej, która zwykle korzysta z łącza logit, to znaczy:

g(pi)=logit(pi)=log(pi1pi)=β0+β1x1,i+

pi

pii

pi,jjiij=1Ni(1pi,j)Nii

pi=1j=1Ni(1pi,j).

pi=1(q)Ni,
q=1pp

pig(pi)log((q)N1)

W związku z tym nie możemy użyć przesunięcia w tym przypadku.

p

Rider_X
źródło
2
+1, witamy na stronie, @Rider_X. Mam nadzieję, że możemy spodziewać się więcej takich odpowiedzi w przyszłości.
gung - Przywróć Monikę
1
@gung - Dzięki! Nie słyszałem wiele o tym, co uważałem za przydatną odpowiedź, więc nie wróciłem wiele. Będę musiał to zmienić. Pozdrowienia.
Rider_X
2
+1 Naprawdę doceniam odpowiedzi, które wyjaśniają teorię i rozumowanie, zamiast (lub oprócz) pokazywania, jakiego kodu i poleceń użyć.
whuber
9

Ta odpowiedź składa się z dwóch części: pierwsza jest bezpośrednią odpowiedzią na pytanie, a druga komentarzem do proponowanego modelu.

Pierwsza część dotyczy zastosowania Numbersjako przesunięcia wraz z umieszczeniem go na prawicy równania. Efektem tego będzie po prostu odjęcie 1 od szacowanego współczynnika Numbers, a tym samym odwrócenie efektu przesunięcia, i w inny sposób nie zmieni wyników. Poniższy przykład, po usunięciu kilku wierszy nieistotnych danych wyjściowych, pokazuje:

library(MASS)
Numbers <- rpois(100,12)
p <- 1 / (1 + exp(0.25*Numbers))
y <- rbinom(100, Numbers, p)
Incident <- pmin(y, 1) 

> summary(glm(Incident~Numbers, family="binomial"))

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.3121  -1.0246  -0.8731   1.2512   1.7465  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)  
(Intercept)  0.99299    0.80624   1.232   0.2181  
Numbers     -0.11364    0.06585  -1.726   0.0844 . <= COEFFICIENT WITH NO OFFSET TERM
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 135.37  on 99  degrees of freedom
Residual deviance: 132.24  on 98  degrees of freedom
AIC: 136.24

> summary(glm(Incident~Numbers, offset=Numbers, family="binomial"))

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.3121  -1.0246  -0.8731   1.2512   1.7465  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  0.99299    0.80624   1.232    0.218    
Numbers     -1.11364    0.06585 -16.911   <2e-16 *** <= COEFFICIENT WITH OFFSET TERM
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 342.48  on 99  degrees of freedom
Residual deviance: 132.24  on 98  degrees of freedom
AIC: 136.24

Zauważ, że wszystko jest takie samo, z wyjątkiem współczynnika Liczb i dewiacji zerowej (oraz statystyki t, ponieważ wciąż testuje się na 0 zamiast na -1.)

t1(1pt)NtNttpttlog(1(1pt)Nt)/Ntlog(1pt)tNtNt

Można również podejrzewać, że prawdopodobieństwo na pacjenta różni się w zależności od pacjenta, co doprowadziłoby do bardziej złożonego, zhierarchizowanego modelu, ale nie będę się tutaj zajmował.

W każdym razie, biorąc pod uwagę ten i ograniczony zakres liczby obserwowanych pacjentów, zamiast stosować model liniowy w skali logitów, może być lepiej nieparametryczne co do związku i pogrupować liczbę pacjentów na trzy lub cztery grupy, na przykład 10-11, 12-13, 14-15 i 16-17, konstruuj zmienne fikcyjne dla tych grup, a następnie uruchom regresję logistyczną ze zmiennymi fikcyjnymi po prawej stronie. Pozwoli to lepiej uchwycić relacje nieliniowe, takie jak „system jest przeciążony około 16 pacjentów, a incydenty zaczynają znacznie narastać”. Jeśli miałbyś znacznie szerszy zakres pacjentów, sugerowałbym uogólniony model addytywny, np. „Gam” z pakietu „mgcv”.

łucznik
źródło
0

Najprościej jest określić link log i zachować przesunięcie jak w przypadku modelu Poissona.

jeden przystanek
źródło
2
Jestem pewien, że masz rację, ale dla mojej korzyści, jak to jest Poisson? Wygląda na to, że OP ma zestaw danych z wynikiem binarnym. Czy byłoby to glm (Incydent ~ Liczby, offset = log (Liczby), rodzina = poisson, dane = data zagrożenia)?
B_Miner