Wie kann ich die Pearson -Teststatistik für mangelnde Übereinstimmung mit einem logistischen Regressionsmodell in R berechnen ?

10

Die Statistik des Wahrscheinlichkeitsverhältnisses (auch bekannt als Abweichung) und der Test auf mangelnde Anpassung (oder Anpassungsgüte) sind für ein logistisches Regressionsmodell (Anpassung unter Verwendung der Funktion) in R ziemlich einfach zu erhalten . Dies kann jedoch sein Es ist leicht, einige Zellzahlen so niedrig zu halten, dass der Test unzuverlässig ist. Eine Möglichkeit, die Zuverlässigkeit des Likelihood-Ratio-Tests auf mangelnde Anpassung zu überprüfen, besteht darin, seine Teststatistik und seinen P- Wert mit denen des Pearson-Chi-Quadrat -Tests (oder ) zu vergleichen.χ 2G2glm(..., family = binomial)χ2

Weder das glmObjekt noch seine summary()Methode geben die Teststatistik für Pearsons Chi-Quadrat-Test wegen mangelnder Anpassung an. Bei meiner Suche habe ich nur die chisq.test()Funktion (im statsPaket) gefunden: In der Dokumentation heißt es: " chisq.testFührt Chi-Quadrat-Kontingenztabellentests und Anpassungstests durch." In der Dokumentation wird jedoch nur spärlich beschrieben, wie solche Tests durchgeführt werden:

Wenn xes sich um eine Matrix mit einer Zeile oder Spalte handelt oder wenn xes sich um einen Vektor handelt und dieser ynicht angegeben ist, wird ein Anpassungstest durchgeführt ( xwird als eindimensionale Kontingenztabelle behandelt). Die Einträge von xmüssen nicht negative ganze Zahlen sein. In diesem Fall lautet die getestete Hypothese, ob die Populationswahrscheinlichkeiten denen in entsprechen poder alle gleich sind, wenn sie pnicht angegeben werden.

Ich würde mir vorstellen, dass Sie die yKomponente des glmObjekts für das xArgument von verwenden könnten chisq.test. Sie können die fitted.valuesKomponente des glmObjekts jedoch nicht für das pArgument von verwenden chisq.test, da die Fehlermeldung " probabilities must sum to 1." angezeigt wird.

Wie kann ich (in R) zumindest die Pearson -Teststatistik für mangelnde Anpassung berechnen, ohne die Schritte manuell durchlaufen zu müssen?χ2

Feuerfeder
quelle

Antworten:

13

Die Summe der quadratischen Pearson-Residuen entspricht genau der Pearson -Teststatistik für mangelnde Anpassung. Wenn also Ihr angepasstes Modell (dh das Objekt) aufgerufen wird , gibt der folgende Code die Teststatistik zurück:χ2glmlogistic.fit

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

residuals.glmWeitere Informationen, einschließlich der anderen verfügbaren Residuen, finden Sie in der Dokumentation zu . Zum Beispiel der Code

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

Sie erhalten die -Teststatistik, genau wie angegeben .G2deviance(logistic.fit)

Feuerfeder
quelle
Ich stimme Macro zu. Wenn Sie Antworten für die Gruppe wollten, hätten Sie warten müssen, um zu hören, was andere zuerst zu sagen haben. Alles, was Sie jetzt bekommen könnten, ist voreingenommen, wenn Sie Ihre Antwort sehen. Wenn Sie die Antwort kennen, was versuchen Sie damit zu beweisen?
Michael R. Chernick
@Macro - Firefeather hat vier Fragen auf dieser Website veröffentlicht (einschließlich dieser) und drei von ihnen (einschließlich dieser) selbst beantwortet, wobei eine seiner eigenen Antworten einmal akzeptiert wurde. Ein paar mehr davon und ich könnte anfangen, ein Muster zu sehen!
Jbowman
@jbowman, ich kann mir vorstellen, Ihre eigene Frage zu beantworten, wenn Sie es selbst herausgefunden haben, bevor jemand anderes eine Antwort gepostet hat, aber Firefeather eine Antwort buchstäblich weniger als 5 Minuten nach dem Posten der Frage gepostet hat. Es scheint, dass er / sie keine Hilfe brauchte , weshalb ich gefragt habe, warum ... Ich verstehe die Motivation nicht wirklich ...
Makro
3
@Macro, bitte sehen Sie diesen offiziellen Link: blog.stackoverflow.com/2011/07/… (er ist auf der Seite "Frage stellen" im Kontrollkästchen unten verlinkt: "Beantworten Sie Ihre eigene Frage - teilen Sie Ihr Wissen im Q & A-Stil "). Ich hatte diese Frage, während ich Hausaufgaben machte (nachdem ich R anstelle von Minitab verwendet hatte, obwohl Minitab im Unterricht demonstriert wurde), aber ich hatte nicht genug Zeit, um die Frage zu tippen und auf eine Antwort zu warten. Ich habe diese Problemumgehung herausgefunden und beschlossen, sie mit der Community zu teilen.
Firefeather
2
@ Macro, du bist herzlich willkommen! Ich wünschte, ich könnte mehr Fragen stellen, wenn ich keine Antwort gebe, und mehr Fragen beantworten, die ich nicht gestellt habe. Aber jbowman ‚s recht ein Muster: meine Beiträge zur Gemeinschaft werden dazu neigen , zu mir zu reden. :) (Zumindest trage ich irgendwie zur Community bei, oder?)
Firefeather
10

Die Pearson-Statistik weist eine entartete Verteilung auf und wird daher im Allgemeinen nicht für die Anpassungsgüte des logistischen Modells empfohlen. Ich bevorzuge strukturierte Tests (Linearität, Additivität). Wenn Sie möchten , ein Omnibus - Test den einzigen Freiheitsgrad le Cessie sehen - van Houwelingen - Copas - Hosmer ungewichteten Summe der Quadrate Test , wie in der R umgesetzt rmsPaket residuals.lrmFunktion.

Frank Harrell
quelle
2
-1: Danke für den Einblick! Dies beantwortet jedoch nicht meine Frage. Da es sich um einen relevanten Kommentar / eine Diskussion zu einer Aussage handelt, die ich im Hintergrund zu meiner Frage gemacht habe, gehört Ihre Antwort wahrscheinlich in einen Kommentar anstatt in eine Antwort.
Feuerfeder
2
Ich denke, dass die vier Personen, die für meine Antwort gestimmt haben, nicht mit Ihnen übereinstimmen. Und Sie haben sich nicht mit der entarteten Verteilung befasst.
Frank Harrell
@FrankHarrell: Unterscheidet sich diese GOF-Messung vom Hosmer-Lemeshow (HL) GOF-Test? Angenommen, aufgrund des Namens, und haben auch die beiden verglichen: HL GOF-Test durchgeführt, wie im ResourceSelectionPaket gefunden, und sein Ergebnis unterscheidet sich von dem, was ich durch Ausführen resid(lrm_object, 'gof')nach dem Anpassen meines logistischen Regressionsmodells als erhalte lrm_object <- lrm(...). Wenn sie sich tatsächlich unterscheiden, können Sie kommentieren, wie sich der HL-Test gegen den hier erwähnten verhält? Vielen Dank!
Meg
1
Die beiden sind sehr unterschiedlich. Die HL-Statistik (jetzt veraltet) hat df festgelegt und basiert normalerweise auf Risikodezilen. Die HL Statistik ist somit nicht als entartet . Achten Sie andererseits auf jede Statistik, bei der der df mit expandiert . N χ 2 Nχ2Nχ2N
Frank Harrell
Ich würde gerne eine Simulation sehen, die diese Degeneration zeigt.
wdkrnls
0

Vielen Dank, ich wusste nicht, dass es so einfach ist wie: Summe (Residuen (f1, Typ = "Pearson") ^ 2) Bitte beachten Sie jedoch, dass die Residuen von Pearsons variieren, je nachdem, ob sie nach kovariaten Gruppen oder nach Einzelpersonen berechnet werden. Ein einfaches Beispiel:

m1 ist eine Matrix (diese ist der Kopf einer größeren Matrix):

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

Wo x1-3 Prädiktoren sind, ist obs nein. Beobachtungen in jeder Gruppe, pi ist die Wahrscheinlichkeit einer Gruppenmitgliedschaft (vorhergesagt aus der Regressionsgleichung), lev ist die Hebelwirkung, die Diagonale der Hutmatrix, yhat die vorhergesagte Nr. (von y = 1) in der Gruppe und y die tatsächliche Nr.

Dies gibt Ihnen Pearson's nach Gruppe. Beachten Sie, wie unterschiedlich es ist, wenn 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) }    }

Somit

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

Wenn es eine große Anzahl von Probanden mit y = 0 kovariaten Mustern gibt, ist der Pearons-Rest viel größer, wenn er nach der Methode "nach Gruppe" und nicht nach der Methode "nach Individuum" berechnet wird.

Siehe z. B. Hosmer & Lemeshow "Applied Logistic Regression", Wiley, 200.

Dardisco
quelle
0

Sie können auch verwenden c_hat(mod), um die gleiche Ausgabe wie zu erhalten sum(residuals(mod, type = "pearson")^2).

user54098
quelle
1
In welchem ​​Paket befindet c_hatsich?
Feuerfeder