Modo appropriato per gestire una tabella di contingenza a 3 livelli


12

Ho una tabella di contingenza a tre livelli, con i dati di conteggio per diverse specie, la pianta ospite da cui sono state raccolte e se quella raccolta è avvenuta in una giornata piovosa (questo in realtà conta!). Usando R, i dati falsi potrebbero essere qualcosa del genere:

count    <- rpois(8, 10)
species  <- rep(c("a", "b"), 4)
host     <- rep(c("c","c", "d", "d"), 2)
rain     <- c(rep(0,4), rep(1,4))
my.table <- xtabs(count ~ host + species + rain)


, , rain = 0

    species
host  a  b
   c 12 15
   d 10 13

, , rain = 1

    species
host  a  b
   c 11 12
   d 12  7

Ora, voglio sapere due cose: le specie sono associate alle piante ospiti? "Pioggia o no" influisce su questa associazione? Ho usato loglm()da MASSquesto:

 # Are species independent to host plants, given the effect of rain?
loglm(~species + host + rain + species*rain + host*rain, data=my.table)

 # Given any relationship between host plants and species, does rain change it?
loglm(~species + host + rain + species*host)

Questo è un po 'al di fuori del mio livello di comfort, e volevo verificare che avessi impostato i modelli nel modo giusto e che questo fosse il modo migliore per affrontare queste domande.

Risposte:


10

Esistono due modi per interpretare la tua prima domanda, che si riflettono nei due modi in cui l'hai posta: "Le specie sono associate alle piante ospiti?" e "Le specie sono indipendenti dalle piante ospiti, dato l'effetto della pioggia?"

La prima interpretazione corrisponde a un modello di indipendenza comune , che afferma che specie e ospiti sono dipendenti, ma congiuntamente indipendenti dal fatto che abbia piovuto:

pshr=pshpr

dove è la probabilità che un'osservazione cada nella cella dove indica specie, tipo di host e valore della pioggia , è la probabilità marginale di dove collassiamo sulla variabile rain e è la probabilità marginale di pioggia.pshr(s,h,r)shrpsh(s,h,)pr

La seconda interpretazione corrisponde a un modello di indipendenza condizionale , in cui si afferma che specie e ospiti sono indipendenti, indipendentemente dal fatto che abbia piovuto:

psh|r=ps|rph|r opshr=psrphr/pr

dove è la probabilità condizionale della cella , dato un valore di . ( s , h , r ) rpsh|r(s,h,r)r

Puoi testare questi modelli in R ( loglinfunzionerebbe anche bene ma ho più familiarità glm):

count <- c(12,15,10,13,11,12,12,7)
species <- rep(c("a", "b"), 4)
host <- rep(c("c","c", "d", "d"), 2)
rain <- c(rep(0,4), rep(1,4))
my.table <- xtabs(count ~ host + species + rain)
my.data <- as.data.frame.table(my.table)
mod0 <- glm(Freq ~ species + host + rain, data=my.data, family=poisson())
mod1 <- glm(Freq ~ species * host + rain, data=my.data, family=poisson())
mod2 <- glm(Freq ~ (species + host) * rain, data=my.data, family=poisson())
anova(mod0, mod1, test="Chi") #Test of joint independence
anova(mod0, mod2, test="Chi") #Test of conditional independence

Sopra, mod1corrisponde all'indipendenza congiunta e mod2corrisponde all'indipendenza condizionale, mentre mod0corrisponde a un modello di indipendenza reciproca . È possibile visualizzare le stime dei parametri utilizzando , ecc. Come al solito, è necessario verificare se i presupposti del modello sono soddisfatti. Nei dati forniti, il modello null si adatta in modo adeguato.pshr=psphprsummary(mod2)

Un modo diverso di affrontare la tua prima domanda sarebbe quello di eseguire il test esatto di Fischer ( fisher.test(xtabs(count ~ host + species))) sulla tabella compressa 2x2 (prima interpretazione) o il test di Mantel-Haenszel ( mantelhaen.test(xtabs(count ~ host + species + rain))) per le tabelle 2x2 a 2 strati o di scrivere un test di permutazione che rispetti la stratificazione (seconda interpretazione).

Per parafrasare la tua seconda domanda, il rapporto tra specie e ospite dipende dal fatto che abbia piovuto?

mod3 <- glm(Freq ~ species*host*rain - species:host:rain, data=my.data, family=poisson())
mod4 <- glm(Freq ~ species*host*rain, data=my.data, family=poisson())
anova(mod3, mod4, test=”Chi”)
pchisq(deviance(mod3), df.residual(mod3), lower=F)

Il modello completo mod4è saturo, ma puoi testare l'effetto in questione osservando la devianza di mod3come ho fatto sopra.


Grazie Lockedoff, soprattutto per avermi aiutato a risolvere il mio pensiero e la differenza tra il modello di indipendenza condizionale e quello congiunto
David w

1

La regressione logistica sembra appropriata per il tuo problema. La variabile che si sta tentando di prevedere è la probabilità che un'osservazione (che è la specie A o la specie B) sia la specie A. Le covariate sono , e facoltativamente .r a i n h o s t r a i nhostrainhostrain

Il comando R sarebbe:

glm (formula = specie ~ host + pioggia, famiglia = binomiale (logit), pesi = conteggi)

e sarai interessato ai valori delle piste. Tuttavia, tieni presente che stai testando più ipotesi.p


1
La regressione logistica sembra ok, ma ha il vincolo aggiuntivo del totale delle righe e delle colonne da correggere. Questo potrebbe non essere il caso dei dati di Poisson. Credo che le risposte non differiranno molto.
suncoolsu

1

Inizialmente ho suggerito di provare una delle tecniche di ordinazione vincolata dal veganpacchetto, ma in un secondo momento dubito che ciò sarebbe utile, poiché in realtà hai 2 tabelle di contingenza. Spero che la seconda parte di questo esempio [PDF: R Dimostrazione - Analisi categorica] possa essere utile.


Pensi che il link non sia funzionante, intendevi questo categorico qui ? È stato utile, grazie!
David,

Sì, sembra che lo spazio nell'URL lo rompa.
Ils
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.