Hay una función existente para la estimación de efectos fijos (unidireccional o bidireccional) de Pandas o Statsmodels.

Había una función en Statsmodels pero parece suspendido. Y en Pandas, hay algo que se llama plm, pero no se puede importar o ejecutarlo usando pd.plm().

Por favor, mantenga a una pregunta por pregunta. También, por favor explique qué quiere decir con «no puedo». Por favor, incluya todas las trazas de retorno (si es que existen) y una muestra de que es pequeño y ejecutable de propia y que se reproduce el problema.
También no evite decirle a la información relevante. «solía ser una función» implica que usted sabe lo que la función es, entonces, ¿por qué usted no le dicen que me confunde.
Dado que los efectos fijos es totalmente equivalente a la OPERACIÓN correctamente el menosprecio variables objetivo, ¿por qué no acaba de hacer el degradante primero y, a continuación, ejecute la OPERACIÓN, como este conjunto de ejemplos? espero que esto sea para alguna asignación o algo, porque como Bayesiano se hace triste, ya que cada vez que alguien utiliza efectos fijos de un ángel pierde sus alas.
Eso es lamentable. Es muy común que en ciertos segmentos de las ciencias sociales, especialmente la psicología y la economía, que a los estudiantes se les dice a utilizar técnicas como efectos fijos, pero nunca de aprender la verdadera teoría detrás de ella. Estos métodos son muy deficiente cuando se utiliza en el mundo real de la configuración y nunca debe ser usado ciegamente como parte de un paquete de software, al menos no hasta que haya dominado la verdadera teoría detrás de ella. Usted puede encontrar más pidiendo ayuda sobre Validado por Cruz.
Usted es libre de utilizar cualquier herramienta que desee. Sólo estoy diciendo que el trabajo en finanzas haciendo quant investigación me ha hecho apreciar las críticas de estos métodos más. Ellos no son buenos para resolver precisamente los problemas que se pretenden resolver (como el de la sección transversal de correlación). Es similar con otros muy malos métodos, como la Fama-Macbeth de regresión. No estoy hablando de nada académico, sólo se aplica econ investigación.

OriginalEl autor user3576212 | 2014-06-12

2 Comentarios

  1. 12

    Como se señaló en los comentarios, PanelOLS ha sido retirado de Pandas de la versión 0.20.0. Por lo que realmente tiene tres opciones:

    1. Si el uso de Python 3 puede utilizar linearmodels como se especifica en la más reciente respuesta: https://stackoverflow.com/a/44836199/3435183

    2. Especificar varios maniquíes en su statsmodels especificación, por ejemplo, el uso de pd.get_dummies. Puede no ser factible si el número de efectos fijos es grande.

    3. O hacer algunas groupby basado degradante y, a continuación, utilizar statsmodels (esto funcionaría si estás estimando un montón de efectos fijos). Aquí está una escueta versión de lo que podría hacer con una forma de efectos fijos:

      def areg(formula,data=None,absorb=None,cluster=None): 
      
          y,X = patsy.dmatrices(formula,data,return_type='dataframe')
      
          ybar = y.mean()
          y = y -  y.groupby(data[absorb]).transform('mean') + ybar
      
          Xbar = X.mean()
          X = X - X.groupby(data[absorb]).transform('mean') + Xbar
      
          reg = sm.OLS(y,X)
          # Account for df loss from FE transform
          reg.df_resid -= (data[absorb].nunique() - 1)
      
          return reg.fit(cov_type='cluster',cov_kwds={'groups':data[cluster].values})

    Y aquí es lo que usted puede hacer si utiliza una versión anterior de Pandas:

    Un ejemplo con el tiempo de los efectos fijos, utilizando los pandas’ PanelOLS (que está en el módulo plm). Aviso, la importación de PanelOLS:

    >>> from pandas.stats.plm import PanelOLS
    >>> df
    
                    y    x
    date       id
    2012-01-01 1   0.1  0.2
               2   0.3  0.5
               3   0.4  0.8
               4   0.0  0.2
    2012-02-01 1   0.2  0.7 
               2   0.4  0.5
               3   0.2  0.3
               4   0.1  0.1
    2012-03-01 1   0.6  0.9
               2   0.7  0.5
               3   0.9  0.6
               4   0.4  0.5

    Nota, el dataframe debe tener un multindex conjunto ; panelOLS determina la time y entity los efectos basados en el índice:

    >>> reg  = PanelOLS(y=df['y'],x=df[['x']],time_effects=True)
    >>> reg
    
    -------------------------Summary of Regression Analysis-------------------------
    
    Formula: Y ~ <x>
    
    Number of Observations:         12
    Number of Degrees of Freedom:   4
    
    R-squared:         0.2729
    Adj R-squared:     0.0002
    
    Rmse:              0.1588
    
    F-stat (1, 8):     1.0007, p-value:     0.3464
    
    Degrees of Freedom: model 3, resid 8
    
    -----------------------Summary of Estimated Coefficients------------------------
          Variable       Coef    Std Err     t-stat    p-value    CI 2.5%   CI 97.5%
    --------------------------------------------------------------------------------
                 x     0.3694     0.2132       1.73     0.1214    -0.0485     0.7872
    ---------------------------------End of Summary--------------------------------- 

    Docstring:

    PanelOLS(self, y, x, weights = None, intercept = True, nw_lags = None,
    entity_effects = False, time_effects = False, x_effects = None,
    cluster = None, dropped_dummies = None, verbose = False,
    nw_overlap = False)
    
    Implements panel OLS.
    
    See ols function docs

    Esta es otra función (como fama_macbeth) donde creo que el plan es mover esta funcionalidad a statsmodels.

    Si utiliza el índice de tiempo o el índice de un grupo id como una variable categórica en una fórmula para statsmodels de la operación, a continuación, crea los efectos fijos de los maniquíes para usted. Sin embargo, la eliminación de los efectos fijos por humillantes todavía no es compatible.
    D. muchas Gracias, sus respuestas son siempre muy útiles!
    ¿Puedo usar los efectos aleatorios con los pandas? Estoy buscando algo similar a stata xtreg, re. Gracias!
    Statsmodels va a hacer de efectos aleatorios.
    ¿cuál es la diferencia entre time_effects y entity_effects?

    OriginalEl autor Karl D.

  2. 10

    Hay un paquete llamado linearmodels (https://pypi.org/project/linearmodels/) que tiene una relación bastante completa de efectos fijos y de efectos aleatorios, implementación, incluyendo agrupado los errores estándar. No el uso de alta-dimensional OLS para eliminar los efectos y por lo tanto puede ser utilizado con grandes conjuntos de datos.

    # Outer is entity, inner is time
    entity = list(map(chr,range(65,91)))
    time = list(pd.date_range('1-1-2014',freq='A', periods=4))
    index = pd.MultiIndex.from_product([entity, time])
    df = pd.DataFrame(np.random.randn(26*4, 2),index=index, columns=['y','x'])
    
    from linearmodels.panel import PanelOLS
    mod = PanelOLS(df.y, df.x, entity_effects=True)
    res = mod.fit(cov_type='clustered', cluster_entity=True)
    print(res)

    Esto produce la siguiente salida:

                              PanelOLS Estimation Summary                           
    ================================================================================
    Dep. Variable:                      y   R-squared:                        0.0029
    Estimator:                   PanelOLS   R-squared (Between):             -0.0109
    No. Observations:                 104   R-squared (Within):               0.0029
    Date:                Thu, Jun 29 2017   R-squared (Overall):             -0.0007
    Time:                        23:52:28   Log-likelihood                   -125.69
    Cov. Estimator:             Clustered                                           
    F-statistic:                      0.2256
    Entities:                          26   P-value                           0.6362
    Avg Obs:                       4.0000   Distribution:                    F(1,77)
    Min Obs:                       4.0000                                           
    Max Obs:                       4.0000   F-statistic (robust):             0.1784
    P-value                           0.6739
    Time periods:                       4   Distribution:                    F(1,77)
    Avg Obs:                       26.000                                           
    Min Obs:                       26.000                                           
    Max Obs:                       26.000                                           
    Parameter Estimates                              
    ==============================================================================
    Parameter  Std. Err.     T-stat    P-value    Lower CI    Upper CI
    ------------------------------------------------------------------------------
    x              0.0573     0.1356     0.4224     0.6739     -0.2127      0.3273
    ==============================================================================
    F-test for Poolability: 1.0903
    P-value: 0.3739
    Distribution: F(25,77)
    Included effects: Entity

    También tiene una fórmula de la interfaz, que es similar a statsmodels,

    mod = PanelOLS.from_formula('y ~ x + EntityEffects', df)
    Respuesta correcta debe ser cambiado a esto, porque PanelOLS se ha dejado caer de pandas en 0,20 y yo también no se puede encontrar en statsmodels. bashtage.github.io/linearmodels/doc/panel/pandas.html
    El comprador tenga cuidado: linearmodels requiere Python 3.
    Además, no hacemos de la muestra de las predicciones. Usted tiene el código que usted mismo.

    OriginalEl autor Kevin S

Dejar respuesta

Please enter your comment!
Please enter your name here