多索引 df 中的线性回归

问题描述

给定下面的多索引多列数据框,我想将 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

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

解决方法

您可以使用 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
==============================================================================