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()
Si les variables explicatives sont x et f, cela ressemble à ceci.
(Vous pouvez utiliser "y" au lieu de ["y"])
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