[PYTHON] Introduction à la modélisation statistique pour l'analyse des données Sélection du modèle GLM

Qu'est-ce qu'un bon modèle

Un modèle avec uniquement des sections comme prédicteurs linéaires ($ \ log \ lambda = \ beta_1 $) est trop facile. En augmentant le nombre de paramètres, tels que $ \ log \ lambda = \ beta_1 + \ beta_2 x + \ dots + \ beta_6x ^ 6 $ L'ajustement s'améliorera.

Le code source d'un polypole est écrit ci-dessous.

>>> 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 **: "Un modèle qui fait de bonnes ** prédictions ** est un bon modèle."

Jusqu'à présent, quatre types de modèles ont été appliqués aux données d'amorçage.

--Modèle sans effet (modèle constant) --Modèle affecté par l'effet de la taille du corps (modèle x) --Modèle affecté par l'application d'engrais (modèle f) --Modèles affectés par l'effet de la taille du corps et l'effet de l'application d'engrais (modèle x + f)

>>> 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')

Mauvais ajustement du modèle statistique: degré d'écart

À propos de la statistique ** écart ** (** écart **) $ D $ qui est une transformation de la vraisemblance logarithmique maximale $ \ log L ^ \ ast $, ce qui est un bon ajustement.

D = -2 \log L ^\ast

Est défini comme. L'écart dans les résultats précédents.

Écart minimum

Le degré de déviation du modèle complet. Un modèle complet est un modèle avec $ \ lambda_i = y_i $. En d'autres termes, la probabilité logarithmique maximale est.

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

Considérant le modèle x,

#x Écart minimum du modèle
>>> dpois = lambda x:sct.poisson.logpmf(x, x)
>>> sum(dpois(d.y))
-192.8897525244958
>>> sum(dpois(d.y)) * (-2)
385.77950504899161

D'après ce qui précède, l'écart résiduel de ce modèle est

>>> 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:Argent, 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
==============================================================================

Écart maximum

L'écart maximum, qui est l'opposé de l'écart minimum, est l'écart du modèle Null. Le modèle Null est un modèle dans lequel le prédicteur linéaire n'est que des sections.

En résumé, plus le degré de déviation des résidus est élevé, plus l'ajustement est mauvais et plus le degré de déviation des résidus est petit, meilleur est l'ajustement (surapprentissage?).

Critères de sélection du modèle: AIC

** AIC ** (critère d'information d'Akaike) est un critère qui met l'accent sur une bonne prédiction. Lorsque le nombre de paramètres estimés les plus probables est de $ k $

\begin{eqnarray}
AIC &=& -2 \{(Probabilité logarithmique maximale) - (Nombre estimé de paramètres le plus probable) \} \\
&=& -2(\log L ^ \ast - k) \\
&=& D + 2k
\end{eqnarray}
modèle Nombre de paramètresk \log L ^ \ast deviance(-2\log L ^ \ast residual deviance AIC
Constant 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

D'après le tableau, le modèle x est le plus petit modèle statistique de l'AIC.

Résumé personnel

En général, l'augmentation des variables explicatives (nombre de paramètres) améliore la précision des données d'apprentissage, mais aggrave la prédiction (la différence de biais entre les modèles imbriqués est constante). → Si vous choisissez quelque chose qui s'explique bien, le biais ne changera pas, mais l'ensemble s'améliorera → AIC diminuera

La différence entre la vraisemblance logarithmique maximale $ \ log L ^ \ ast $ et la vraisemblance logarithmique moyenne provient du modèle constant (k = 1) si la première amélioration en augmentant le nombre de paramètres (k = 1-> 2) est supérieure à 1. L'AIC devient plus petit. Je ne comprends pas ce japonais ...

Recommended Posts

Introduction à la modélisation statistique pour l'analyse des données Sélection du modèle GLM
Introduction à la modélisation statistique pour l'analyse des données
Introduction à la modélisation statistique pour l'analyse des données Test de rapport de ressemblance GLM et asymétrie de test
Introduction à la modélisation statistique pour l'analyse des données Élargissement de la gamme d'applications de GLM
Notes de lecture (en Python et Stan) pour une introduction à la modélisation statistique pour l'analyse de données (Midorimoto)
[Introduction à minimiser] Analyse des données avec le modèle SEIR ♬
"Introduction à l'analyse de données par modélisation statistique bayésienne à partir de R et Stan" implémenté en Python
[Introduction au modèle SEIR] Essayez d'ajuster les données COVID-19 ♬
Comment utiliser les outils d'analyse de données pour les débutants
Organisation des procédures de base pour l'analyse des données et le traitement statistique (4)
Note de lecture: Introduction à l'analyse de données avec Python
Organisation des procédures de base pour l'analyse des données et le traitement statistique (2)
[CovsirPhy] Package Python COVID-19 pour l'analyse de données: modèle SIR-F
[CovsirPhy] Package Python COVID-19 pour l'analyse des données: modèle SIR
[Livre technique] Introduction à l'analyse de données avec Python -1 Chapitre Introduction-
[Français] scikit-learn 0.18 Tutorial Tutoriel d'apprentissage statistique pour le traitement des données scientifiques Sélection du modèle: sélection de l'estimateur et de ses paramètres
[Introduction aux Data Scientists] Statistiques descriptives et analyse de régression simple ♬
Python pour l'analyse des données Chapitre 4
Python pour l'analyse des données Chapitre 2
[Python] Introduction à la création de graphiques à l'aide de données de virus corona [Pour les débutants]
Introduction à Python pour, pendant
Conseils et précautions lors de l'analyse des données
Python pour l'analyse des données Chapitre 3
Introduction à l'analyse de données avec Python P32-P43 [ch02 3.US Baby Names 1880-2010]
J'ai essayé d'utiliser GLM (modèle linéaire généralisé) pour les données de prix des actions
Introduction à l'analyse de données par Python P17-P26 [ch02 1.usa.gov données de bit.ly]
Introduction à la modélisation statistique bayésienne avec python ~ Essai de régression linéaire avec MCMC ~
Une introduction à Mercurial pour les non-ingénieurs
Modèle de prétraitement pour l'analyse des données (Python)
Analyse de données pour améliorer POG 3 ~ Analyse de régression ~
Introduction à l'analyse d'image opencv python
Premiers pas avec Python pour les non-ingénieurs
J'ai essayé l'analyse de données IRMf avec python (Introduction au décodage des informations cérébrales)
Outil de visualisation Python pour le travail d'analyse de données
[Introduction à Python3, jour 17] Chapitre 8 Destinations de données (8.1-8.2.5)
[Introduction à Python3, jour 17] Chapitre 8 Destinations de données (8.3-8.3.6.1)
Une introduction à OpenCV pour l'apprentissage automatique
[MNIST] Convertir les données en PNG pour les keras
[Introduction à Python3 Jour 19] Chapitre 8 Destinations de données (8.4-8.5)
[Introduction à Python3 Day 18] Chapitre 8 Destinations de données (8.3.6.2 à 8.3.6.3)
Introduction à discord.py (1er jour) -Préparation pour discord.py-
Les débutants lisent "Introduction à TensorFlow 2.0 pour les experts"
Une introduction à Python pour l'apprentissage automatique
JupyterLab Basic Setting 2 pour l'analyse des données (pip)
[Introduction au Data Scientist] Bases de Python ♬
Configuration de base de JupyterLab pour l'analyse des données (pip)
Une introduction à Python pour les programmeurs en langage C
Analyse des données en Python Résumé des sources que les débutants devraient d'abord consulter
Introduction à l'analyse des séries temporelles ~ Modèle d'ajustement saisonnier ~ Implémenté en R et Python
Une introduction à l'analyse de données à l'aide de Python - Pour augmenter le nombre de vues vidéo -
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for