在统计方面,我仍然是菜鸟。 我正在使用具有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”,但是此变量未显示在结果摘要中。
答案 0 :(得分:2)
我不是专家,我担心不能告诉您什么是适用于纵向数据的正确检验,但是我认为您所获得的数字真的不能那么值得信赖。
首先,答案的简单部分是关于“为什么不是所有变量都显示出来”:例如,在lvl1中,“ a”没有显示出来是因为您必须修复某种“基本”值。因此,您应将每个条目读作“具有'b'而不是'a'的效果”和“具有'd'而不是'a'的效果”等。用更多的数学术语来说,如果您有一个分类变量,取三个值(此处为a,b,d),那么当您对它们进行隐式一键编码时,您将获得三个维,它们的值始终为0或1,且总和始终为1。这意味着最终的{回归A
中的{1}}矩阵将始终退化,并且您必须删除一列以免出现这种情况(因此对回归系数完全没有任何可解释性)。
关于为什么我认为您得到的数字不可信:线性回归的各种假设中,连续观察值(行)的独立性。对于纵向数据,这正是明显失败的原因。将示例推到极限,如果您在一天中观察到一群人(例如,您的集合中有11个人),持续1天,您将获得将近100万行的巨大数据框,并且每个人几乎都拥有相同的数据数据一遍又一遍地重复。在这种情况下,您的模型将认为自变量和因变量之间的任何虚假相关性都非常重要(对他来说,您已经运行了86400个独立测试,并且它们都完全确认了相同的结论!),当然这并不是情况。
总结一下,我不能肯定地说您得到的回归系数并不是您可以期望的最佳猜测,但是可以肯定的是,t统计量,p值以及其他所有看起来像统计量的东西都没有很有道理。