2

在统计方面,我仍然是菜鸟。我正在使用具有 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

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

自变量:Label(分类)、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”,但此变量未显示在结果摘要中。

4

1 回答 1

2

我不是专家,我担心我不能告诉你什么是适用于纵向数据的正确测试,但我认为你得到的数字真的不能那么可信。

首先,答案的简单部分,关于您的“为什么我的所有变量都没有显示”:例如,在 lvl1 中,“a”没有显示,因为您必须修复某种“基础”值。所以你应该把每一个条目读成“用'b'代替'a'的效果”和“用'd'代替'a'的效果”等等。用更多的数学术语来说,如果你有一个分类变量取三个值(此处为 a,b,d),然后当您对它们进行隐式 one-hot 编码时,您将获得始终具有值 0 或 1 的三个维度,其总和始终为 1。这意味着您的最终A矩阵在回归y = A.x + b中总是会退化,

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

总而言之,我不能肯定地说你得到的回归系数不是你能期望的最好的猜测,但可以肯定的是 t 统计量、p 值和其他所有看起来像统计量的东西没有多大意义.

于 2018-07-20T08:37:00.047 回答