[PYTHON] Einführung in die statistische Modellierung für die Datenanalyse GLM-Modellauswahl

Was ist ein gutes Modell?

Ein Modell mit nur Abschnitten als linearen Prädiktoren ($ \ log \ lambda = \ beta_1 $) ist zu einfach. Durch Erhöhen der Anzahl von Parametern, z. B. $ \ log \ lambda = \ beta_1 + \ beta_2 x + \ dots + \ beta_6x ^ 6 $ Die Passform wird sich verbessern.

Der Quellcode für ein Polypoly ist unten geschrieben.

>>> import numpy
>>> import pandas
>>> import matplotlib.pyplot as plt
>>> import statsmodels.api as sm
>>> import statsmodels.formula.api as smf

>>> d = pandas.read_csv("data3a.csv")

>>> model = smf.glm('y ~ x + I(x**2) + I(x**3) + I(x**4) + I(x**5) + I(x**6)', data=d, family=sm.families.Poisson())
>>> result = model.fit()
>>> result.summary()

>>> params = result.params

>>> fit = lambda x: numpy.exp(params[0] + params[1] * x + params[2] * x ** 2 + params[3] * x ** 3 + params[4] * x ** 4 + params[5] * x ** 5 + params[6] * x ** 6)

>>> xx = numpy.linspace(min(d.x), max(d.x), 100)
>>> plt.plot(xx, fit(xx))

>>> plt.plot(d.x[d.f == 'T'], d.y[d.f == 'T'], 'ro')
>>> plt.plot(d.x[d.f == 'C'], d.y[d.f == 'C'], 'bo')
>>> plt.show()

** AIC **: "Ein Modell, das gute Vorhersagen macht, ist ein gutes Modell."

Bisher wurden vier Modelltypen auf die Seed-Daten angewendet.

>>> plt.subplot(221)
>>> model = smf.glm('y ~ 1', data=d, family=sm.families.Poisson())
>>> result = model.fit()
>>> plt.plot(xx, [numpy.exp(result.params[0]) for _ in range(100)])

>>> plt.subplot(222)
>>> model = smf.glm('y ~ f', data=d, family=sm.families.Poisson())
>>> result = model.fit()
>>> plt.plot(xx, [numpy.exp(result.params[0] + result.params[1]) for _ in range(100)], 'r')
>>> plt.plot(xx, [numpy.exp(result.params[0]) for _ in range(100)], 'b')

>>> plt.subplot(223)
>>> model = smf.glm('y ~ x', data=d, family=sm.families.Poisson())
>>> result = model.fit()
>>> fit = lambda x: numpy.exp(result.params[0] + result.params[1] * x)
>>> plt.plot(xx, fit(xx))

>>> plt.subplot(224)
>>> model = smf.glm('y ~ x + f', data=d, family=sm.families.Poisson())
>>> result = model.fit()
>>> fit = lambda x: numpy.exp(result.params[0]+ result.params[2] * x)
>>> plt.plot(xx, fit(xx), 'b')
>>> fit = lambda x: numpy.exp(result.params[0]+ result.params[1] + result.params[2] * x)
>>> plt.plot(xx, fit(xx), 'r')

Schlechte Anpassung des statistischen Modells: Grad der Abweichung

Über die Statistik ** Abweichung ** (** Abweichung **) $ D $, die eine Transformation der maximalen Log-Wahrscheinlichkeit $ \ log L ^ \ ast $ ist, die gut passt.

D = -2 \log L ^\ast

Ist definiert als. Die "Abweichung" in den vorherigen "Ergebnissen. Zusammenfassung ()" ist ** Restabweichung ** (= Abweichung der minimalen Modellabweichung, ** Restabweichung **).

Minimale Abweichung

Der Grad der Abweichung des vollständigen Modells. Ein vollständiges Modell ist ein Modell mit $ \ lambda_i = y_i $. Mit anderen Worten ist die maximale Protokollwahrscheinlichkeit.

\log L = \sum_i \log \frac{y_i ^{y_i} \exp(-y_i}{y_i !}

In Anbetracht des x-Modells,

#x Minimale Abweichung des Modells
>>> dpois = lambda x:sct.poisson.logpmf(x, x)
>>> sum(dpois(d.y))
-192.8897525244958
>>> sum(dpois(d.y)) * (-2)
385.77950504899161

Von oben ist die Restabweichung dieses Modells

>>> result.llf * (-2) -  sum(dpois(d.y))*(-2)
84.992996490729922
>>> result.summary()
                 Generalized Linear Model Regression Results
==============================================================================
Dep. Variable:                      y   No. Observations:                  100
Model:                            GLM   Df Residuals:                       98
Model Family:                 Poisson   Df Model:                            1
Link Function:                    log   Scale:                             1.0
Method:                          IRLS   Log-Likelihood:                -235.39
Date:Geld, 05  6 2015   Deviance:                       84.993
Time:                        13:12:50   Pearson chi2:                     83.8
No. Iterations:                     7
==============================================================================
                 coef    std err          z      P>|z|      [95.0% Conf. Int.]
------------------------------------------------------------------------------
Intercept      1.2917      0.364      3.552      0.000         0.579     2.005
x              0.0757      0.036      2.125      0.034         0.006     0.145
==============================================================================

Maximale Abweichung

Die maximale Abweichung, die der minimalen Abweichung entgegengesetzt ist, ist die Abweichung des Nullmodells. Das Nullmodell ist ein Modell, bei dem der lineare Prädiktor nur aus Abschnitten besteht.

Zusammenfassend lässt sich sagen, dass die Anpassung umso besser ist, je größer der Grad der Restabweichung ist, je schlechter die Anpassung ist und je kleiner der Grad der Restabweichung ist (Überlernen?).

Modellauswahlkriterien: AIC

** AIC ** (Akaikes Informationskriterium) ist ein Kriterium, das eine gute Vorhersage betont. Wenn die Anzahl der wahrscheinlichsten geschätzten Parameter $ k $ ist

\begin{eqnarray}
AIC &=& -2 \{(Maximale Protokollwahrscheinlichkeit) - (Höchstwahrscheinlich geschätzte Anzahl von Parametern) \} \\
&=& -2(\log L ^ \ast - k) \\
&=& D + 2k
\end{eqnarray}
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
f 2 -237.6 475.3 89.5 479.3
x 2 -235.4 470.8 85.0 474.8
x+f 3 -235.3 470.6 84.8 476.6
full 100 -192.9 385.6 0.0 585.8

Aus der Tabelle geht hervor, dass das x-Modell das kleinste statistische Modell von AIC ist.

Persönliches Resümee

Im Allgemeinen verbessert das Erhöhen der erklärenden Variablen (Anzahl der Parameter) die Genauigkeit der Trainingsdaten, verschlechtert jedoch die Vorhersage (der Bias-Unterschied zwischen den verschachtelten Modellen ist konstant). → Wenn Sie etwas wählen, das gut erklärt werden kann, ändert sich die Verzerrung nicht, aber das Ganze verbessert sich. → Der AIC nimmt ab

Die Differenz zwischen der maximalen Log-Wahrscheinlichkeit $ \ log L ^ \ ast $ und der durchschnittlichen Log-Wahrscheinlichkeit ergibt sich aus dem konstanten Modell (k = 1), wenn die Verbesserung des ersteren durch Erhöhen der Anzahl der Parameter (k = 1-> 2) größer als 1 ist. AIC wird kleiner. Ich verstehe diesen Japaner nicht ...

Recommended Posts

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 GLM-Ähnlichkeitsverhältnis-Test und Testasymmetrie
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 zur Minimierung] Datenanalyse mit SEIR-Modell ♬
"Einführung in die Datenanalyse durch statistische Bayes'sche Modellierung beginnend mit R und Stan" in Python implementiert
[Einführung in das SEIR-Modell] Versuchen Sie, COVID-19-Daten anzupassen ♬
Verwendung von Datenanalysetools für Anfänger
Organisation grundlegender Verfahren zur Datenanalyse und statistischen Verarbeitung (4)
Lesehinweis: Einführung in die Datenanalyse mit Python
Organisation grundlegender Verfahren zur Datenanalyse und statistischen Verarbeitung (2)
[CovsirPhy] COVID-19 Python-Paket für die Datenanalyse: SIR-F-Modell
[CovsirPhy] COVID-19 Python-Paket für die Datenanalyse: SIR-Modell
[Technisches Buch] Einführung in die Datenanalyse mit Python -1 Kapitel Einführung-
[Übersetzung] scikit-learn 0.18 Tutorial Statistisches Lernen Tutorial für die wissenschaftliche Datenverarbeitung Modellauswahl: Auswahl des Schätzers und seiner Parameter
[Einführung in Data Scientists] Deskriptive Statistik und einfache Regressionsanalyse ♬
Python für die Datenanalyse Kapitel 4
Python für die Datenanalyse Kapitel 2
[Python] Einführung in die Diagrammerstellung mit Corona-Virendaten [Für Anfänger]
Einführung in Python For, While
Tipps und Vorsichtsmaßnahmen bei der Datenanalyse
Python für die Datenanalyse Kapitel 3
Einführung in die Datenanalyse mit Python P32-P43 [ch02 3.US Babynamen 1880-2010]
Ich habe versucht, GLM (Generalized Linear Model) für Aktienkursdaten zu verwenden
Einführung in die Datenanalyse mit Python P17-P26 [ch02 1.usa.gov Daten von bit.ly]
Einführung in die Bayes'sche statistische Modellierung mit Python ~ Versuch einer linearen Regression mit MCMC ~
Eine Einführung in Mercurial für Nicht-Ingenieure
Vorverarbeitungsvorlage für die Datenanalyse (Python)
Datenanalyse zur Verbesserung von POG 3 ~ Regressionsanalyse ~
Einführung in die Bildanalyse opencv python
Erste Schritte mit Python für Nicht-Ingenieure
Ich habe versucht, fMRI-Daten mit Python zu analysieren (Einführung in die Dekodierung von Gehirninformationen)
Python-Visualisierungstool für die Datenanalyse
[Einführung in Python3, Tag 17] Kapitel 8 Datenziele (8.1-8.2.5)
[Einführung in Python3, Tag 17] Kapitel 8 Datenziele (8.3-8.3.6.1)
Eine Einführung in OpenCV für maschinelles Lernen
[MNIST] Konvertiert Daten für Keras in PNG
[Einführung in Python3 Tag 19] Kapitel 8 Datenziele (8.4-8.5)
[Einführung in Python3 Tag 18] Kapitel 8 Datenziele (8.3.6.2 bis 8.3.6.3)
Einführung in discord.py (1. Tag) -Preparation for discord.py-
Anfänger lesen "Einführung in TensorFlow 2.0 für Experten"
Eine Einführung in Python für maschinelles Lernen
JupyterLab Grundeinstellung 2 für die Datenanalyse (pip)
[Einführung in Data Scientist] Grundlagen von Python ♬
JupyterLab Basic Setup für die Datenanalyse (pip)
Eine Einführung in Python für C-Sprachprogrammierer
Datenanalyse in Python Zusammenfassung der Quellen, die Anfänger zuerst betrachten sollten
Einführung in die Zeitreihenanalyse ~ Saisonales Anpassungsmodell ~ In R und Python implementiert
Eine Einführung in die Datenanalyse mit Python - Um die Anzahl der Videoansichten zu erhöhen -
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung