[PYTHON] Einführung in die statistische Modellierung für die Datenanalyse GLM-Ähnlichkeitsverhältnis-Test und Testasymmetrie

Führen Sie einen Test durch, um die geschätzten statistischen Modelle zu vergleichen. Dieses Kapitel befasst sich mit dem ** Likelihood-Ratio-Test **.

Statistisches Test-Framework

Verfahren

  1. Bestimmen Sie die zu verwendenden Daten
  2. Entwerfen Sie ein geeignetes statistisches Modell, das dem Zweck und der Datenstruktur entspricht, und schätzen Sie den wahrscheinlichsten Parameter.

Im Test werden ein Modell mit wenigen Parametern und ein Modell mit vielen Parametern (einfaches Modell und komplexes Modell) getestet. Sie heißen ** Nullhypothese ** und ** Alternativhypothese **.

Neyman-Pearson-Test-Framework

Der statistische Modelltest untersucht, ob der Satz "Die Nullhypothese ist korrekt" geleugnet werden kann.

  1. Behandeln Sie die Güte des Modells als ** Teststatistik **
  2. Angenommen, die Nullhypothese ist ein "wahres Modell".
  3. Untersuchen Sie die Variation (Wahrscheinlichkeitsverteilung) der Teststatistik und bestimmen Sie den "wahrscheinlichen Bereich" des Teststatistikwerts.
  4. Wenn die Größe des "gemeinsamen Bereichs" 95% beträgt, kann gesagt werden, dass ein Signifikanzniveau von 5% festgelegt ist.
  5. Wenn die vom Modell der alternativen Hypothese erhaltenen Teststatistiken außerhalb des "gemeinsamen Bereichs" liegen, lehnen Sie die Nullhypothese ab und unterstützen Sie die alternative Hypothese.

Beispiel für einen Likelihood-Ratio-Test: Untersuchung des Unterschieds im Abweichungsgrad

Zu verwendendes statistisches Modell:

Modell- Anzahl der Parameterk \log L ^ \ast deviance(-2\log L ^ \ast residual deviance AIC
Konstante 1 -237.6 475.3 89.5 477.3
x 2 -235.4 470.8 85.0 474.8
full 100 -192.9 385.6 0.0 585.8

Im Likelihood-Ratio-Test wird die Differenz des Abweichungsgrads verwendet, die durch Multiplizieren des Logarithmus des Likelihood-Verhältnisses mit -2 erhalten wird. Im Fall dieses Beispiels

\begin{eqnarray}
\frac{L_1 ^\ast}{L_2 ^\ast} &=& \frac{Maximale Wahrscheinlichkeit eines konstanten Modells:\exp(-237.6)}{Maximale Wahrscheinlichkeit des x-Modells:\exp(-235.4)} \\
\Delta D_{1,2} &=& -2 * (\log L_1 ^ \ast - \log L_2 ^ \ast) \\
\Delta D_{1,2} &=& D_1 - D_2 \\
\Delta D_{1,2} &=& 4.5
\end{eqnarray}

Es wird bewertet, dass dieser Abweichungsgrad um 4,5 verbessert wird.

Die Nullhypothese lautet \Delta D_{1,2}Selten Unterschied (Ablehnung) \Delta D_{1,2}Ist ein gemeinsamer Unterschied (kann nicht abgelehnt werden)
Ein echtes Modell Erstklassiger Fehler (kein Problem)
Kein echtes Modell (kein Problem) Zweite Art von Fehler

Das Neyman-Pearson-Testframework ** dient der Prüfung erstklassiger Fehler **

Als Prozedur

  1. Angenommen, ein konstantes Modell, das eine Nullhypothese ist, ist korrekt (ein echtes Modell).
  2. Wenn ein bestimmtes Modell auf die beobachteten Daten angewendet wird, wird es zu $ \ hat {\ beta_1} = 2.06 $, sodass dies als dasselbe wie das wahre Modell angesehen wird.
  3. Erstellen Sie Daten aus einem echten Modell und wenden Sie das x-Modell jedes Mal an, um $ \ Delta D_ {1, 2} $ zu berechnen und die Verteilung von $ \ Delta D_ {1, 2} $ zu ermitteln
  4. Die Wahrscheinlichkeit P, dass die Differenz zwischen dem Abweichungsgrad des konstanten Modells und dem x-Modell $ \ Delta D_ {1,2} \ geq 4.5 $ beträgt, wird erhalten.
  5. Wenn $ \ Delta D_ {1,2} = 4,5 $ als unmöglicher Wert angesehen wird, wird die Nullhypothese verworfen und die Alternativhypothese automatisch übernommen.

Die Wahrscheinlichkeit $ P $, dass die Differenz zwischen dem Abweichungsgrad des konstanten Modells und dem x-Modell $ \ Delta D_ {1,2} \ geq 4.5 $ beträgt, wird als ** P-Wert ** bezeichnet.

Bestimmen Sie das ** Signifikanzniveau ** im Voraus (selbst)

Lassen.

Nullhypothese: Berechnet die Wahrscheinlichkeit, dass $ \ Delta D_ {1,2}, eine Teststatistik in der Welt, in der ein konstantes Modell ein echtes Modell ist, größer als 4,5 ist (machen Sie einen erstklassigen Fehler).

Parametrische Bootstrap-Methode

Über 3. Ein Verfahren zum Erzeugen der obigen Daten basierend auf einer Simulation unter Verwendung von Zufallszahlen. Angenommen, das Ergebnis eines bestimmten Modells wird in "fit1" und das Ergebnis des x-Modells in "fit2" gespeichert.

>>> model1 = smf.glm('y~1', data=d, family=sm.families.Poisson())
>>> model2 = smf.glm('y~x', data=d, family=sm.families.Poisson())
>>> fit1 = model1.fit()
>>> fit2 = model2.fit()

# fit1$deviance - fit2$deviance
>>> fit1.deviance - fit2.deviance
4.5139410788540459

Aus der durchschnittlichen Anzahl von Samen, die von einem bestimmten Modell geschätzt werden $ \ lambda = \ exp (2.06) = 7.85 $ Die zu generierenden Daten sind "** 100 Poisson-Zufallszahlen mit einem Durchschnitt von 7,85 **".

# d$y.rnd <- rpois(100, lambda=mean(d$y))
>>> d.y.rnd = sci.poisson.rvs(d.y.mean(), size=100)
# fit1 <- glm(y.rnd ~ 1, data=d, family=poisson)
>>> model1 = smf.glm('y.rnd ~ 1', data=d, family=sm.families.Poisson())
>>> fit1 = model1.fit()
# fit2 <- glm(y.rnd ~ x, data=d, family=poisson)
>>> model2 = smf.glm('y.rnd ~ x', data=d, family=sm.families.Poisson())
>>> fit2 = model2.fit()
# fit1$deviance - fit2$deviance
>>> fit1.deviance - fit2.deviance
0.63270346107955788

Der Unterschied im Grad der Abweichung beträgt 1,92 für Daten, deren Durchschnittswert eine konstante Poisson-Zufallszahl ist.

Das x-Modell mit bedeutungslosen erklärenden Variablen ist besser als das konstante Modell, das das "wahre Modell" ist.

Durch etwa 1000-maliges Wiederholen dieses Schritts können ** Verteilung der Teststatistik ** und "Verteilung der Abweichungsgraddifferenz $ \ Delta D_ {1, 2} $" in diesem Beispiel vorhergesagt werden.

def get_dd(d):
    sample_d = len(d)
    mean_y = d.y.mean()
    d.y.rnd = sci.poisson.rvs(mu=mean_y, size=sample_d)
    model1 = smf.glm('y.rnd ~ 1', data=d, family=sm.families.Poisson())
    model2 = smf.glm('y.rnd ~ x', data=d, family=sm.families.Poisson())
    fit1 = model1.fit()
    fit2 = model2.fit()
    return fit1.deviance - fit2.deviance


def pb(d, bootstrap=1000):
    return pandas.Series([get_dd(d) for _ in xrange(bootstrap)])

results = pb(d)
results.describe()

results[results >= 4.5].count()


results[results>= 4.5].count()
# 32

results.quantile(.95)
# 3.6070094508948025

results.hist()


Aus den obigen Ergebnissen ergibt sich, dass die "Wahrscheinlichkeit, dass der Unterschied in der Abweichung größer als 4,5 ist", 32/1000 $ beträgt, dh $ P = 0,032 $. Wenn Sie den Unterschied im Abweichungsgrad $ \ Delta D_ {1,2} $ finden, wobei $ P = 0,05 $. Es wird $ \ Delta D_ {1,2} \ leq 3.61 $.

Von Oben, Es gibt einen signifikanten Unterschied, weil "der P-Wert der Abweichungsgraddifferenz von 4,5 0,032 betrug, dies ist also kleiner als das Signifikanzniveau von 0,05". Es wird beurteilt, dass "die Nullhypothese (konstantes Modell) verworfen wird und das x-Modell erhalten bleibt, so dass dies übernommen wird".

Ungefähre Berechnungsmethode unter Verwendung der Chi-Quadrat-Verteilung

Die Wahrscheinlichkeitsverteilung der Abweichungsgraddifferenz $ \ Delta D_ {1,2} $ kann durch die $ \ chi ^ 2 $ -Verteilung des Freiheitsgrades $ k_2 --k_1 = 2-1 = 1 $ angenähert werden.

Anscheinend gibt es keine ANOVA für GLM in "Statistikmodellen" ...

Die $ \ chi ^ 2 $ -Verteilungsnäherung ist ** eine Näherungsberechnung, die effektiv ist, wenn die Stichprobengröße groß ist **.

Die PB-Methode scheint besser für kleine Proben mit einer kleinen Anzahl untersuchter Personen zu sein oder für Fälle, in denen die Variation der Daten keine Poisson-Verteilung, sondern eine gleichmäßig verteilte Normalverteilung ist.

Zusammenfassung

Sowohl der Likelihood-Ratio-Test als auch die Modellauswahl durch AIC konzentrieren sich auf die Statistik der Abweichung.

--AIC: Der Zweck besteht darin, ein "Modell auszuwählen, das gute Vorhersagen macht". --Litability Ratio Test: Der Zweck besteht darin, die Nullhypothese sicher abzulehnen

Es scheint, dass es keine andere Wahl gibt, als nach dem Zweck zu wählen.

Recommended Posts

Einführung in die statistische Modellierung für die Datenanalyse GLM-Ähnlichkeitsverhältnis-Test und Testasymmetrie
Einführung in die statistische Modellierung für die Datenanalyse GLM-Modellauswahl
Eine Einführung in die statistische Modellierung für die Datenanalyse
Einführung in die statistische Modellierung für die Datenanalyse Generalized Linear Model (GLM)
Einführung in die statistische Modellierung für die Datenanalyse Erweiterung des Anwendungsbereichs von GLM
Lesen von Notizen (in Python und Stan) zur Einführung in die statistische Modellierung für die Datenanalyse (Midorimoto)
"Einführung in die Datenanalyse durch statistische Bayes'sche Modellierung beginnend mit R und Stan" in Python implementiert
Organisation grundlegender Verfahren zur Datenanalyse und statistischen Verarbeitung (4)
Organisation grundlegender Verfahren zur Datenanalyse und statistischen Verarbeitung (2)
[Einführung in Data Scientists] Deskriptive Statistik und einfache Regressionsanalyse ♬
Verwendung von Datenanalysetools für Anfänger
[Einführung zur Minimierung] Datenanalyse mit SEIR-Modell ♬
Eine Einführung in die Sprachanalyse für Musik-Apps
[Für Anfänger] So studieren Sie den Python3-Datenanalysetest
Lesehinweis: Einführung in die Datenanalyse mit Python
Datenverarbeitungsmethoden für Maschinenbauingenieure und Nicht-Computeringenieure (Einführung 2)
[Technisches Buch] Einführung in die Datenanalyse mit Python -1 Kapitel Einführung-
Datenverarbeitungsmethoden für Maschinenbauingenieure und Nicht-Computeringenieure (Einführung 1)
[Einführung in cx_Oracle] (Teil 6) Zuordnung von DB- und Python-Datentypen
[Einführung in die Udemy Python3 + -Anwendung] 42. für Anweisung, break-Anweisung und continue-Anweisung
20200329_Einführung in die Datenanalyse mit Python 2nd Edition Personal Summary
[Einführung in Data Scientists] Grundlagen von Python ♬ Funktionen und Klassen
[Einführung in Python] Kombinieren Sie Nikkei-Durchschnitts- und NY Dow-CSV-Daten
[Python] Einführung in die Diagrammerstellung mit Corona-Virendaten [Für Anfänger]
Python für die Datenanalyse Kapitel 4
Python für die Datenanalyse Kapitel 2
Punkt- und Figurendatenmodellierung
Einführung in Python For, While
Tipps und Vorsichtsmaßnahmen bei der Datenanalyse
Python für die Datenanalyse Kapitel 3
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part1-
Einführung in die Datenanalyse mit Python P32-P43 [ch02 3.US Babynamen 1880-2010]
Einführung in die Datenanalyse mit Python P17-P26 [ch02 1.usa.gov Daten von bit.ly]
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part2-
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part4-
So führen Sie einen Komponententest durch Teil 1 Entwurfsmuster zur Einführung
Einführung in die Bayes'sche statistische Modellierung mit Python ~ Versuch einer linearen Regression mit MCMC ~
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part3-
[Einführung in Data Scientists] Grundlagen von Python ♬ Bedingte Verzweigung und Schleifen
[Einführung in Data Scientists] Grundlagen von Python ♬ Funktionen und anonyme Funktionen usw.