python - 使用 ols(python statsmodel)是否适用于纵向数据和多个因变量?

标签 python python-2.7 statsmodels patsy

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

我的 Pandas 数据框看起来是这样的:

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”,但该变量未显示在结果摘要中。

最佳答案

我不是专家,恐怕我无法告诉您适用于纵向数据的正确检验是什么,但我认为您得到的数字并不能真正那么可信。

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

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

总而言之,我不能肯定地说您得到的回归系数不是您希望得到的最佳猜测,但可以肯定的是 t 统计量、p 值和其他看起来像统计量的一切都不是很有意义。

关于python - 使用 ols(python statsmodel)是否适用于纵向数据和多个因变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51438022/

相关文章:

python - 我可以在 python 中重载 -> 吗?

python - 如何在 Windows 8 的 pyvenv 中安装 Numpy?

python - mysqldb接口(interface)错误

linux - Python : Import cairo error (2. 7 & 3.6) undefined symbol :cairo_tee_surface_index

Python yFInance api如何获取收盘价而不是调整后的收盘价?

python-2.7 - 为什么链式(区间)比较不能在 numpy 数组上工作?

python-2.7 - Windows上的Python导入系统日志

python - 具有分类变量的 statsmodels 中的聚类标准误差 (Python)

python - 如何修复 Statsmodel 警告 : "Maximum no. of iterations has exceeded"

python - 时间序列数据的平稳性