2017-07-07 3 views
1

Dans le modèle de statistiques, il est facile d'ajouter un terme d'interaction. Cependant, toutes les interactions ne sont pas significatives. Ma question est de savoir comment laisser tomber ceux qui sont insignifiants? Par exemple l'aéroport de Kootenay.Comment faire pour supprimer des termes d'interaction catégoriques insignifiants Python StatsModel

# -*- coding: utf-8 -*- 
import pandas as pd 
import statsmodels.formula.api as sm 


if __name__ == "__main__": 

    # Read data 
    census_subdivision_without_lower_mainland_and_van_island = pd.read_csv('../data/augmented/census_subdivision_without_lower_mainland_and_van_island.csv') 

    # Fit all data 
    fit = sm.ols(formula="instagram_posts ~ airports * C(CNMCRGNNM) + ports_and_ferry_terminals + railway_stations + accommodations + visitor_centers + festivals + attractions + C(CNMCRGNNM) + C(CNSSSBDVS3)", data=census_subdivision_without_lower_mainland_and_van_island).fit() 
    print(fit.summary()) 

enter image description here

+0

Il serait utile que vous fournissiez un échantillon des données, et peut-être une description de ce que vous souhaitez idéalement que la sortie soit. – vander

Répondre

0

J'ai essayé de recréer certaines des données, en se concentrant sur les variables dans l'interaction. Je ne suis pas sûr que l'objectif soit uniquement d'extraire les valeurs, ou si vous avez besoin d'un format spécifique, mais voici un exemple de la façon de résoudre le problème en utilisant des pandas (puisque vous importez des pandas dans le message original):

import pandas as pd 
import statsmodels.formula.api as sm 
np.random.seed(2) 

df = pd.DataFrame() 
df['instagram_posts'] = np.random.rand(50) 
df['airports'] = np.random.rand(50) 
df['CNMCRGNNM'] = np.random.choice(['Kootenay','Nechako','North Coast','Northeast','Thompson-Okanagan'],50) 

fit = sm.ols(formula="instagram_posts ~ airports * C(CNMCRGNNM)",data=df).fit() 
print(fit.summary()) 

C'est la sortie:

============================================================================================================== 
               coef std err   t  P>|t|  [0.025  0.975] 
-------------------------------------------------------------------------------------------------------------- 
Intercept          0.4594  0.159  2.885  0.006  0.138  0.781 
C(CNMCRGNNM)[T.Nechako]      -0.2082  0.195  -1.067  0.292  -0.602  0.186 
C(CNMCRGNNM)[T.North Coast]     -0.1268  0.360  -0.352  0.726  -0.854  0.601 
C(CNMCRGNNM)[T.Northeast]      0.0930  0.199  0.468  0.642  -0.309  0.495 
C(CNMCRGNNM)[T.Thompson-Okanagan]    0.1439  0.245  0.588  0.560  -0.351  0.638 
airports          -0.1616  0.277  -0.583  0.563  -0.722  0.398 
airports:C(CNMCRGNNM)[T.Nechako]    0.7870  0.343  2.297  0.027  0.094  1.480 
airports:C(CNMCRGNNM)[T.North Coast]   0.3008  0.788  0.382  0.705  -1.291  1.893 
airports:C(CNMCRGNNM)[T.Northeast]   -0.0104  0.348  -0.030  0.976  -0.713  0.693 
airports:C(CNMCRGNNM)[T.Thompson-Okanagan] -0.0311  0.432  -0.072  0.943  -0.904  0.842 

changement alpha à votre niveau préféré d'importance:

alpha = 0.05 
df = pd.DataFrame(data = [x for x in fit.summary().tables[1].data[1:] if float(x[4]) < alpha], columns = fit.summary().tables[1].data[0]) 

cadre de données df détient les enregistrements de la table d'origine qui sont significatifs pour alpha. Dans ce cas, il s'agit des aéroports Intercept et : C (CNMCRGNNM) [T.Nechako].