Come posso calcolare la statistica test di Pearson


10

Il test del rapporto di verosimiglianza (noto anche come devianza) G2 e test di mancanza di adattamento (o di bontà di adattamento) è abbastanza semplice da ottenere per un modello di regressione logistica (adattamento mediante la glm(..., family = binomial)funzione) in R. Tuttavia, può essere facile di avere un numero di cellule inferiore abbastanza da rendere il test inaffidabile. Un modo per verificare l'affidabilità del test del rapporto di verosimiglianza per mancanza di adattamento è quello di confrontare le sue statistiche di test e il valore P con quelli del test di mancanza di adattamento chi quadrato di Pearson (o χ2 ).

Né l' glmoggetto né il suo summary()metodo riportano la statistica del test per il test chi quadrato di Pearson per mancanza di adattamento. Nella mia ricerca, l'unica cosa che mi è venuta in mente è la chisq.test()funzione (nel statspacchetto): la sua documentazione dice " chisq.testesegue test di tabella di contingenza chi-quadrato e test di bontà di adattamento". Tuttavia, la documentazione è scarsa su come eseguire tali test:

Se xè una matrice con una riga o colonna o se xè un vettore e ynon viene fornita, viene eseguito un test di bontà di adattamento ( xviene trattato come una tabella di contingenza unidimensionale). Le voci di xdevono essere numeri interi non negativi. In questo caso, l'ipotesi verificata è se le probabilità della popolazione siano uguali a quelle presenti po siano tutte uguali se pnon vengono fornite.

Immagino che potresti usare il ycomponente glmdell'oggetto per l' xargomento di chisq.test. Tuttavia, non è possibile utilizzare il fitted.valuescomponente glmdell'oggetto per l' pargomento di chisq.test, poiché verrà visualizzato un errore: " probabilities must sum to 1."

χ2

Risposte:


13

χ2glmlogistic.fit

sum(residuals(logistic.fit, type = "pearson")^2)

Vedere la documentazione su residuals.glmper ulteriori informazioni, incluso quali altri residui sono disponibili. Ad esempio, il codice

sum(residuals(logistic.fit, type = "deviance")^2)

G2deviance(logistic.fit)


Sono d'accordo con Macro. Se volevi risposte dal gruppo, avresti dovuto aspettare di sentire prima cosa gli altri hanno da dire. Qualunque cosa tu possa ottenere ora è distorta dalla tua risposta. Inoltre, se conosci la risposta, cosa stai cercando di dimostrare facendo questo?
Michael R. Chernick,

@Macro - Firefeather ha pubblicato quattro domande su questo sito (incluso questo) e ha risposto a tre di esse (incluso questo), accettando una delle sue risposte una volta. Qualche altro in questo modo e potrei iniziare a vedere uno schema!
jbowman

@jbowman, posso immaginare di rispondere alla tua domanda se l'hai capito da solo prima che qualcun altro abbia pubblicato una risposta ma firefeather ha pubblicato una risposta letteralmente meno di 5 minuti dopo aver pubblicato la domanda, sembra che non abbia bisogno di aiuto , che è ciò che mi ha fatto chiedere perché ... Non capisco davvero la motivazione ...
Macro

3
@Macro, consulta questo link ufficiale: blog.stackoverflow.com/2011/07/… (è collegato alla pagina Fai una domanda nell'etichetta della casella di controllo in basso: "Rispondi alla tua domanda - condividi le tue conoscenze, domande e risposte) "). Avevo questa domanda mentre stavo facendo i compiti (avendo scelto di usare R invece di Minitab, anche se Minitab è stato dimostrato in classe), ma non ho avuto abbastanza tempo per scrivere la domanda e aspettare una risposta. Ho risolto questo problema e ho deciso di condividerlo con la comunità.
Firefeather,

2
@Macro, sei il benvenuto! Vorrei poter fare più domande in cui non fornisco la risposta e rispondere a più domande che non ho fatto. Ma jbowman 's ragione su un modello: il mio contributo alla comunità vengono tendente a parlare da solo. :) (Almeno sto contribuendo in qualche modo alla comunità, giusto?)
Firefeather il

10

La statistica di Pearson ha una distribuzione degenerata, quindi non è raccomandata in generale per la bontà di adattamento del modello logistico. Preferisco i test strutturati (linearità, additività). Se si desidera un test omnibus, vedere il singolo grado di libertà le Cessie - van Houwelingen - Copas - Hosmer test della somma dei quadrati non ponderato implementato nella funzione rmspacchetto R.residuals.lrm


2
-1: grazie per l'intuizione! Tuttavia, questo non risponde alla mia domanda. Poiché si tratta di commenti / discussioni pertinenti su un'affermazione che ho fatto in background alla mia domanda, la tua risposta probabilmente appartiene a un commento, anziché a una risposta.
Firefeather,

2
Immagino che le quattro persone che hanno votato per la mia risposta non siano d'accordo con te. E non hai affrontato la distribuzione degenerata.
Frank Harrell,

@FrankHarrell: questa misura GOF è diversa dal test GOF di Hosmer-Lemeshow (HL)? Supponendo che a causa del nome, e ho anche confrontato i due: Test HL GOF condotto come trovato nel ResourceSelectionpacchetto, e il suo risultato è diverso da quello che ottengo resid(lrm_object, 'gof')dopo aver adattato il mio modello di regressione logistica come lrm_object <- lrm(...). Se sono davvero diversi, puoi commentare come si combina il test HL con quello che hai citato qui? Grazie!
Meg

1
χ2Nχ2N

Mi piacerebbe vedere una simulazione che mostra questa degenerazione.
wdkrnls,

0

Grazie, non mi rendevo conto che era semplice come: somma (residui (f1, tipo = "perlato") ^ 2) Tuttavia, si noti che il residuo di Pearsons varia a seconda che sia calcolato dal gruppo di covariate o dall'individuo. Un semplice esempio:

m1 è una matrice (questa è la testa di una matrice più grande):

m1 [1: 4,1: 8]

    x1 x2 x3 obs    pi   lev  yhat y
obs  1  1 44   5 0.359 0.131 1.795 2
obs  0  1 43  27 0.176 0.053 4.752 4
obs  0  1 53  15 0.219 0.062 3.285 1
obs  0  1 33  22 0.140 0.069 3.080 3

Dove x1-3 sono predittori, obs è no. osservazioni in ciascun gruppo, pi è la probabilità di appartenenza al gruppo (prevista dall'equazione di regressione), lev è leva, la diagonale della matrice cappello, yhat il no previsto. (di y = 1) nel gruppo y il numero effettivo.

Questo ti darà Pearson per gruppo. Nota come è diverso se y == 0: ' 'fun1 <- function(j){        if (m1[j,"y"] ==0){ # y=0 for this covariate pattern     Pr1 <- sqrt( m1[i,"pi"] / (1-m1[i,"pi"]))     Pr2 <- -sqrt (m1[i,"obs"]) res <- round( Pr1 * Pr2, 3) return(res) } else {  Pr1 <- m1[j,"y"] - m1[j,"yhat"] Pr2 <- sqrt(   m1[j,"yhat"] * ( 1-(m1[j,"pi"]) )   ) res <- round( Pr1/Pr2, 3) return(res) }    }

così

nr <-nrow(m1)
nr1 <- seq(1,nr)
Pr <- sapply(1:nrow[m1], FUN=fun1)
PrSj <- sum(Pr^2)

Se ci sono molti soggetti con modelli di covariata y = 0, i residui di Pearons saranno molto più grandi se calcolati usando il metodo "per gruppo" anziché "per individuo".

Vedi ad esempio Hosmer & Lemeshow "Regressione logistica applicata", Wiley, 200.


0

Puoi anche usare c_hat(mod)quello che darà lo stesso output di sum(residuals(mod, type = "pearson")^2).


1
In quale pacchetto si c_hattrova?
Firefeather
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.