Étape AIC en Python

Aperçu

Eh bien, il n'y a pas de stepAIC en Python.

Si vous y réfléchissez, vous pouvez trouver Article comme celui-ci dans StackOverflow.

Reportez-vous au lien introduit par le répondant (Forward Selection with stats models; mais seule la régression linéaire est prise en charge, et l'indice est un coefficient de décision, pas AIC). J'ai décidé d'écrire stepAIC.

step_aic

def step_aic(model, exog, endog, **kwargs):
    """
    This select the best exogenous variables with AIC
    Both exog and endog values can be either str or list.
    (Endog list is for the Binomial family.)

    Note: This adopt only "forward" selection

    Args:
        model: model from statsmodels.formula.api
        exog (str or list): exogenous variables
        endog (str or list): endogenous variables
        kwargs: extra keyword argments for model (e.g., data, family)

    Returns:
        model: a model that seems to have the smallest AIC
    """

    # exog,Convertir de force endog au format liste
    exog = np.r_[[exog]].flatten()
    endog = np.r_[[endog]].flatten()
    remaining = set(exog)
    selected = []  #Facteurs qui ont confirmé l'adoption

    #Calculer l'AIC avec un terme constant uniquement
    formula_head = ' + '.join(endog) + ' ~ '
    formula = formula_head + '1'
    aic = model(formula=formula, **kwargs).fit().aic
    print('AIC: {}, formula: {}'.format(round(aic, 3), formula))

    current_score, best_new_score = np.ones(2) * aic

    #Si tous les facteurs sont adoptés ou si l'AIC n'augmente pas, quel que soit le facteur ajouté, le processus prend fin.
    while remaining and current_score == best_new_score:
        scores_with_candidates = []
        for candidate in remaining:

            #Calculez l'AIC en ajoutant les facteurs restants un par un
            formula_tail = ' + '.join(selected + [candidate])
            formula = formula_head + formula_tail
            aic = model(formula=formula, **kwargs).fit().aic
            print('AIC: {}, formula: {}'.format(round(aic, 3), formula))

            scores_with_candidates.append((aic, candidate))

        #Le facteur avec le plus petit AIC est le meilleur_Candidat
        scores_with_candidates.sort()
        scores_with_candidates.reverse()
        best_new_score, best_candidate = scores_with_candidates.pop()

        #Si l'AIC diminue en raison de l'ajout de facteurs candidats, ajoutez-la en tant que facteur déterministe.
        if best_new_score < current_score:
            remaining.remove(best_candidate)
            selected.append(best_candidate)
            current_score = best_new_score

    formula = formula_head + ' + '.join(selected)
    print('The best formula: {}'.format(formula))
    return model(formula, **kwargs).fit()

Comment utiliser

Si les variables explicatives sont x et f, cela ressemble à ceci.
(Vous pouvez utiliser "y" au lieu de ["y"])

20170225.png

Épilogue

Est-ce vrai ... est-ce vrai ...?

Les réponses étaient exactement les mêmes que celles du chapitre sur la distribution binaire et la régression logistique de Midoribon (Introduction à la modélisation statistique pour l'analyse des données).

Mais si vous faites une erreur, faites-le moi savoir.

Recommended Posts

Étape AIC en Python
Quadtree en Python --2
Python en optimisation
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Méta-analyse en Python
Unittest en Python
Époque en Python
Discord en Python
Allemand en Python
nCr en python
N-Gram en Python
Programmation avec Python
Plink en Python
FizzBuzz en Python
Sqlite en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Réflexion en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
Liste triée en Python
AtCoder # 36 quotidien avec Python
AtCoder # 2 tous les jours avec Python
Daily AtCoder # 32 en Python
Daily AtCoder # 18 en Python
Motif singleton en Python
Opérations sur les fichiers en Python
Séquence de touches en Python
Daily AtCoder # 33 en Python
Distribution logistique en Python
AtCoder # 7 tous les jours avec Python
Décomposition LU en Python
Une doublure en Python
AtCoder # 24 tous les jours avec Python
classe de cas en python
Implémentation RNN en python
AtCoder # 8 tous les jours avec Python
Traitement de fichiers en Python
Elasticsearch Reindex en Python
Daily AtCoder # 42 en Python
Tri de base en Python