Schritt AIC in Python

Überblick

Nun, es gibt kein stepAIC in Python.

Wenn Sie darüber nachdenken, finden Sie Artikel wie diesen in StackOverflow.

Siehe den vom Befragten eingeführten Link (Vorauswahl mit Statistikmodellen; es wird jedoch nur die lineare Regression unterstützt, und der Index ist ein Entscheidungskoeffizient, kein AIC). Ich habe mich entschieden, stepAIC zu schreiben.

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,Konvertieren Sie Endog zwangsweise in das Listenformat
    exog = np.r_[[exog]].flatten()
    endog = np.r_[[endog]].flatten()
    remaining = set(exog)
    selected = []  #Faktoren, die die Annahme bestätigten

    #Berechnen Sie den AIC nur mit konstantem Term
    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

    #Wenn alle Faktoren übernommen werden oder wenn sich der AIC nicht erhöht, unabhängig davon, welcher Faktor hinzugefügt wird, endet der Prozess.
    while remaining and current_score == best_new_score:
        scores_with_candidates = []
        for candidate in remaining:

            #Berechnen Sie den AIC, wenn Sie die verbleibenden Faktoren einzeln addieren
            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))

        #Der Faktor mit dem kleinsten AIC ist der beste_Kandidat
        scores_with_candidates.sort()
        scores_with_candidates.reverse()
        best_new_score, best_candidate = scores_with_candidates.pop()

        #Wenn der AIC aufgrund der Hinzufügung von Kandidatenfaktoren abnimmt, fügen Sie ihn als deterministischen Faktor hinzu.
        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()

Wie benutzt man

Wenn die erklärenden Variablen x und f sind, sieht es so aus.
(Sie können "y" anstelle von ['y'] verwenden.)

20170225.png

Nachwort

Ist es richtig ... ist es richtig ...?

Die Antworten waren genau die gleichen wie in den Kapiteln zur binären Verteilung und logistischen Regression in Midoribon (Einführung in die statistische Modellierung für die Datenanalyse).

Aber wenn Sie einen Fehler machen, lassen Sie es mich bitte wissen.

Recommended Posts

Schritt AIC in Python
Quadtree in Python --2
Python in der Optimierung
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Metaanalyse in Python
Unittest in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Plink in Python
FizzBuzz in Python
SQLite in Python
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken
Sortierte Liste in Python
Täglicher AtCoder # 36 mit Python
AtCoder # 2 jeden Tag mit Python
Täglicher AtCoder # 32 in Python
Täglicher AtCoder # 18 in Python
Singleton-Muster in Python
Dateioperationen in Python
Tastenanschlag in Python
Täglicher AtCoder # 33 in Python
Logistische Verteilung in Python
Täglicher AtCoder # 7 in Python
LU-Zerlegung in Python
Ein Liner in Python
AtCoder # 24 jeden Tag mit Python
Fallklasse in Python
RNN-Implementierung in Python
AtCoder # 8 jeden Tag mit Python
Dateiverarbeitung in Python
Elasticsearch Reindex in Python
Täglicher AtCoder # 42 in Python
Grundlegende Sortierung in Python