使用ols(python statsmodel)对纵向数据和多个因变量是否正确?

时间:2018-07-20 08:13:40

标签: python python-2.7 statsmodels patsy

在统计方面,我仍然是菜鸟。 我正在使用具有patsy功能的Python Package Statsmodel。

我的熊猫数据框如下:

index         sed   label           c_g  lvl1 lvl2
0             5.0   SP_A            c    b    c
1            10.0   SP_B            g    b    c
2             0.0   SP_C            c    b    c
3           -10.0   SP_H            c    b    c
4             0.0   SP_J            g    b    c
5           -20.0   SP_K            g    b    c
6            30.0   SP_W            g    a    a
7            40.0   SP_X            g    a    a
8           -10.0   SP_Y            c    a    a
9            45.0  SP_BB            g    a    a
10           45.0  SP_CC            g    a    a
11           10.0   SP_A            c    b    c
12           10.0   SP_B            g    b    c
13           10.0   SP_C            c    b    c
14            6.0   SP_D            g    b    c
15           10.0   SP_E            c    b    c
16           29.0   SP_F            c    b    c
17            3.0   SP_G            g    b    c
18           23.0   SP_H            c    b    c
19           34.0   SP_J            g    b    c

因变量:沉积(纵向数据)

自变量:标签(类别),control_grid(类别),lvl1(类别),lvl2(类别)。

我对两件事感兴趣。

哪些自变量对因变量有重大影响?

哪些自变量具有显着的相互作用?

在搜索并阅读了多个文档之后,我将执行以下操作:

import statsmodels.formula.api as smf
import pandas as pd

df =  pd.read_csv('some.csv')
model = smf.ols(formula = 'sedimentation ~ lvl1*lvl2',data=df)
results = model.fit()
results.summary()

结果显示:

    OLS Regression Results                            
==============================================================================
Dep. Variable:          sedimentation   R-squared:                       0.129
Model:                            OLS   Adj. R-squared:                  0.124
Method:                 Least Squares   F-statistic:                     24.91
Date:                Tue, 17 Jul 2018   Prob (F-statistic):           4.80e-15
Time:                        11:15:28   Log-Likelihood:                -2353.6
No. Observations:                 510   AIC:                             4715.
Df Residuals:                     506   BIC:                             4732.
Df Model:                           3                                         
Covariance Type:            nonrobust                                         
=======================================================================================
                          coef    std err          t      P>|t|      [0.025      0.975]
---------------------------------------------------------------------------------------
Intercept               6.9871      1.611      4.338      0.000       3.823      10.151
lvl1[T.b]              -3.7990      1.173     -3.239      0.001      -6.103      -1.495
lvl1[T.d]              -3.5124      1.400     -2.509      0.012      -6.263      -0.762
lvl2[T.b]              -8.9427      1.155     -7.744      0.000     -11.212      -6.674
lvl2[T.c]               5.1436      0.899      5.722      0.000       3.377       6.910
lvl2[T.f]              -3.5124      1.400     -2.509      0.012      -6.263      -0.762
lvl1[T.b]:lvl2[T.b]    -8.9427      1.155     -7.744      0.000     -11.212      -6.674
lvl1[T.d]:lvl2[T.b]          0          0        nan        nan           0           0
lvl1[T.b]:lvl2[T.c]     5.1436      0.899      5.722      0.000       3.377       6.910
lvl1[T.d]:lvl2[T.c]          0          0        nan        nan           0           0
lvl1[T.b]:lvl2[T.f]          0          0        nan        nan           0           0
lvl1[T.d]:lvl2[T.f]    -3.5124      1.400     -2.509      0.012      -6.263      -0.762
==============================================================================
Omnibus:                       13.069   Durbin-Watson:                   1.118
Prob(Omnibus):                  0.001   Jarque-Bera (JB):               18.495
Skew:                          -0.224   Prob(JB):                     9.63e-05
Kurtosis:                       3.818   Cond. No.                          inf
==============================================================================

我是否在Python中使用正确的模型来获得所需的结果?

我想是,但我想验证一下。我读该表的方式是,分类变量lvl1和lvl2对因变量具有显着影响,并且显示出显着的交互作用(对于某些变量)。但是,我不明白为什么不是所有变量都显示出来……正如您在数据中看到的那样,lvl1列中也包含“ a”,但是此变量未显示在结果摘要中。

1 个答案:

答案 0 :(得分:2)

我不是专家,我担心不能告诉您什么是适用于纵向数据的正确检验,但是我认为您所获得的数字真的不能那么值得信赖。

首先,答案的简单部分是关于“为什么不是所有变量都显示出来”:例如,在lvl1中,“ a”没有显示出来是因为您必须修复某种“基本”值。因此,您应将每个条目读作“具有'b'而不是'a'的效果”和“具有'd'而不是'a'的效果”等。用更多的数学术语来说,如果您有一个分类变量,取三个值(此处为a,b,d),那么当您对它们进行隐式一键编码时,您将获得三个维,它们的值始终为0或1,且总和始终为1。这意味着最终的{回归A中的{1}}矩阵将始终退化,并且您必须删除一列以免出现这种情况(因此对回归系数完全没有任何可解释性)。

关于为什么我认为您得到的数字不可信:线性回归的各种假设中,连续观察值(行)的独立性。对于纵向数据,这正是明显失败的原因。将示例推到极限,如果您在一天中观察到一群人(例如,您的集合中有11个人),持续1天,您将获得将近100万行的巨大数据框,并且每个人几乎都拥有相同的数据数据一遍又一遍地重复。在这种情况下,您的模型将认为自变量和因变量之间的任何虚假相关性都非常重要(对他来说,您已经运行了86400个独立测试,并且它们都完全确认了相同的结论!),当然这并不是情况。

总结一下,我不能肯定地说您得到的回归系数并不是您可以期望的最佳猜测,但是可以肯定的是,t统计量,p值以及其他所有看起来像统计量的东西都没有很有道理。