【问题标题】:Linear Regression in a multiindex df多索引 df 中的线性回归
【发布时间】:2021-08-16 20:22:14
【问题描述】:

给定下面的多索引多列数据框,我想将 LinearRegression 应用于此数据框的每个块,例如,对于每个 Station_Number,我想在 LST 和 Value 之间运行回归。 df 看起来像这样:

                           Latitude  Longitude        LST  Elevation      Value
Station_Number Date                                                            
RSM00025356    2019-01-01   66.3797     173.33 -31.655008       78.0 -28.733333
               2019-02-02   66.3797     173.33 -17.215009       78.0 -17.900000
               2019-02-10   66.3797     173.33 -31.180006       78.0 -19.500000
               2019-02-26   66.3797     173.33 -19.275007       78.0  -6.266667
               2019-04-23   66.3797     173.33 -12.905004       78.0  -4.916667

之后还有更多的站点。理想情况下,输出只是每个站号的回归结果

【问题讨论】:

    标签: python pandas linear-regression scipy.stats


    【解决方案1】:

    您可以使用 groupby 拆分 DataFrame,然后运行组内的每个回归。您可以将结果存储在字典中,其中键是“Station_Number”。我将使用 statsmodels 进行回归,但有许多可能的库,这取决于您对标准错误和推理的关心程度。

    import statsmodels.formula.api as smf
    
    d = {}
    for station,gp in df.groupby('Station_Number'):
        mod = smf.ols(formula='LST ~ Value', data=gp)
        d[station] = mod.fit()
    

    回归结果:

    d['RSM00025356'].params
    #Intercept   -11.676331
    #Value         0.696465
    #dtype: float64
    
    d['RSM00025356'].summary()
    
                                OLS Regression Results                            
    ==============================================================================
    Dep. Variable:                    LST   R-squared:                       0.660
    Model:                            OLS   Adj. R-squared:                  0.547
    Method:                 Least Squares   F-statistic:                     5.831
    Date:                Fri, 28 May 2021   Prob (F-statistic):             0.0946
    Time:                        11:17:51   Log-Likelihood:                -14.543
    No. Observations:                   5   AIC:                             33.09
    Df Residuals:                       3   BIC:                             32.30
    Df Model:                           1                                         
    Covariance Type:            nonrobust                                         
    ==============================================================================
                     coef    std err          t      P>|t|      [0.025      0.975]
    ------------------------------------------------------------------------------
    Intercept    -11.6763      5.143     -2.270      0.108     -28.043       4.690
    Value          0.6965      0.288      2.415      0.095      -0.221       1.614
    ==============================================================================
    Omnibus:                          nan   Durbin-Watson:                   2.536
    Prob(Omnibus):                    nan   Jarque-Bera (JB):                0.299
    Skew:                           0.233   Prob(JB):                        0.861
    Kurtosis:                       1.895   Cond. No.                         35.9
    ==============================================================================
    

    【讨论】: