ANOVA dotycząca danych dwumianowych

32

Analizuję eksperymentalny zestaw danych. Dane składają się ze sparowanego wektora rodzaju leczenia i wyniku dwumianowego:

Treatment    Outcome
A            1
B            0
C            0
D            1
A            0
...

W kolumnie wyników 1 oznacza sukces, a 0 oznacza niepowodzenie. Chciałbym dowiedzieć się, czy leczenie znacząco zmienia wynik. Istnieją 4 różne zabiegi, przy każdym eksperymencie powtarzanym wiele razy (2000 dla każdego zabiegu).

Moje pytanie brzmi: czy mogę analizować wynik binarny za pomocą ANOVA? Czy powinienem używać testu chi-kwadrat, aby sprawdzić dane dwumianowe? Wygląda na to, że chi-kwadrat zakłada, że ​​proporcja zostanie równo podzielona, ​​co nie jest prawdą. Innym pomysłem byłoby podsumowanie danych przy użyciu proporcji sukcesów w porównaniu z niepowodzeniami dla każdego leczenia, a następnie zastosowanie testu proporcji.

Jestem ciekawy twoich rekomendacji dla testów, które mają sens dla tego rodzaju dwumianowych eksperymentów powodzenia / niepowodzenia.

speciousfool
źródło

Odpowiedzi:

18

Nie dla ANOVA, która zakłada normalnie rozłożoną zmienną wyniku (między innymi). Do rozważenia są transformacje „starej szkoły”, ale wolałbym regresję logistyczną (równoważną kwadratowi chi, gdy jest tylko jedna zmienna niezależna, jak w twoim przypadku). Zaletą stosowania regresji logistycznej w porównaniu z testem chi-kwadrat jest to, że można łatwo użyć kontrastu liniowego do porównania określonych poziomów leczenia, jeśli wynik testu będzie znaczący (typ 3). Na przykład A kontra B, B kontra C itp.

Aktualizacja dodana dla przejrzystości:

Biorąc pod uwagę dane (zestaw danych post doc z Allison ) i używając zmiennych cits w następujący sposób, o to mi chodziło:

postdocData$citsBin <- ifelse(postdocData$cits>2, 3, postdocData$cits)
postdocData$citsBin <- as.factor(postdocData$citsBin)
ordered(postdocData$citsBin, levels=c("0", "1", "2", "3"))
contrasts(postdocData$citsBin) <- contr.treatment(4, base=4) # set 4th level as reference
contrasts(postdocData$citsBin)
     #   1 2 3
     # 0 1 0 0
     # 1 0 1 0
     # 2 0 0 1
     # 3 0 0 0

# fit the univariate logistic regression model
model.1 <- glm(pdoc~citsBin, data=postdocData, family=binomial(link="logit"))

library(car) # John Fox package
car::Anova(model.1, test="LR", type="III") # type 3 analysis (SAS verbiage)
     # Response: pdoc
     #          LR Chisq Df Pr(>Chisq)
     # citsBin   1.7977  3     0.6154

chisq.test(table(postdocData$citsBin, postdocData$pdoc)) 
     # X-squared = 1.7957, df = 3, p-value = 0.6159

# then can test differences in levels, such as: contrast cits=0 minus cits=1 = 0
# Ho: Beta_1 - Beta_2 = 0
cVec <- c(0,1,-1,0)
car::linearHypothesis(model.1, cVec, verbose=TRUE) 
B_Miner
źródło
1
@ user2040. Nie rozumiem, jak zrobiłbyś test typu 3? Czy jest to coś związanego z SAS? (przepraszam, że moja wiedza na temat SAS jest bardzo ograniczona). Zrobiłbym regresję logistyczną, jak sugerowałeś, ale z 2 zmiennymi obojętnymi. Biorąc również pod uwagę, że rozumiem poprawnie, jeśli wykonujesz regresję logistyczną, testowanie, czy niektóre lub wszystkie współczynniki wynoszą 0, odbywa się przez odchylenie (lub współczynnik prawdopodobieństwa) i JEST asymptotycznie Chi-Sq (niekoniecznie z df = 1)
suncoolsu
1
@ suncoolsu: Tak, praktycznie mówiąc, powinieneś dojść do tego samego wniosku. Nie powinienem był mówić „równoważny” (pracuję z dużymi zbiorami danych, więc kończą tak samo). W odpowiedzi dodałem trochę kodu, aby ułatwić wyjaśnienie.
B_Miner
8

Być może niektórzy uważają to za staromodne, ale jeśli chcesz tylko przetestować hipotezę zerową wszystkich grup o równym prawdopodobieństwie sukcesu, możesz zdefiniować jako liczbę sukcesów w grupie , jako liczbę prób w grupie , szacunkową prawdopodobieństwo w grupie będzie wynosić , a następnie zastosuje transformację stabilizującą wariancję dla dwumianu, czyli Takie podejście było (czasami ) wystarczająco dobry dla Fishera, więc może być przydatny także dziś!Xkknkkkp^k=Xk/nk

g(p)=arcsinp

Jednak niektórzy współcześni autorzy są dość sceptycznie nastawieni do transformacji łukowej, patrz na przykład http://www.mun.ca/biology/dschneider/b7932/B7932Final10Dec2010.pdf Ale ci autorzy zajmują się takimi problemami, jak przewidywanie, gdzie pokazują Arcsine może prowadzić do problemów. Jeśli zajmujesz się tylko testowaniem hipotez, powinno być w porządku. Bardziej nowoczesne podejście może wykorzystywać regresję logistyczną.

kjetil b halvorsen
źródło
4
(+1) ... jeśli wszystkie grupy mają to samo nie. obserwacje.
Scortchi - Przywróć Monikę
1
Lub można użyć wag opartych na liczbie obserwacji.
kjetil b halvorsen
3

Chciałbym się różnić od tego, co myślisz o teście Chi-Sq. Ma zastosowanie, nawet jeśli dane nie są dwumianowe. Opiera się na asymptotycznej normalności mle (w większości przypadków).

Zrobiłbym regresję logistyczną w ten sposób:

logπ^1π^=β0+β1×D1+β2×D2

gdzie

D1 i są zmiennymi obojętnymi. D2D1=D2=0A,D1=1,D2=0B,D1=1D2=1C

Ho:β0=β1=β2=0

Jest odpowiednikiem ANOVA, jeśli istnieje związek lub nie.

Ho:β0=0

Czy test A ma jakiś wpływ.

Ho:β1β0=0

Czy test B ma jakiś wpływ.

Ho:β2(β0+β12)=0

Czy test na C ma jakiś wpływ.

Teraz możesz robić kolejne kontrasty, aby znaleźć to, co Cię interesuje. To wciąż test chi-sq, ale z różnymi stopniami swobody (odpowiednio 3, 1, 1 i 1)

suncoolsu
źródło
Nadal muszę pomyśleć o kontraście. Poprawię to, gdy tylko będę miał czas. Przepraszam za to
suncoolsu,
-3

Myślę, że masz rację, że ANOVA nie powinna być używana do analizy dwumianowej zmiennej zależnej. Wiele osób używa tego do porównywania średnich zmiennej binarnej odpowiedzi (0 1), ale nie należy jej używać, ponieważ poważnie narusza to założenie Normalności i Równości wariancji. Testy chi-kwadrat lub regresja logistyczna są najlepsze w takich sytuacjach.

sachin01663
źródło
Taki sam jak twoja odpowiedź tutaj .
Scortchi - Przywróć Monikę