如何解读statsmodels多元线性回归model.summary()的分类变量与截距?
多元线性回归结果解读疑问
我正在使用statsmodels库执行多元线性回归,检验混杂变量对因变量的影响,代码如下:
model = ols(f'{metric}_diff ~ {" + ".join(confounding_variable_names)}', data=df).fit()
数据样例(仅展示2行):
Age Sex Experience using a gamepad (1-4) Experience using a VR headset (1-4) Experience using hand tracking (1-3) Experience using controllers in VR (1-3) Glasses ID_1 ID_2 Method_1 Method_2 ID_controller ID_handTracking CorrectGestureCounter_controller CorrectGestureCounter_handTracking IncorrectGestureCounter_controller IncorrectGestureCounter_handTracking IDs ID_K_1_3 25 Female 4 3 1 2 Yes K_1 K_3 controller handTracking K_1 K_3 21 34 5 2 ID_K_4_5 19 Male 4 2 1 2 Yes K_4 K_5 controller handTracking K_4 K_5 21 36 14 17
执行model.summary()后得到回归输出:
OLS Regression Results ====================================================================================== Dep. Variable: CorrectGestureCounter_diff R-squared: 0.477 Model: OLS Adj. R-squared: 0.249 Method: Least Squares F-statistic: 2.088 Date: Wed, 28 Dec 2022 Prob (F-statistic): 0.105 Time: 15:29:41 Log-Likelihood: -73.565 No. Observations: 24 AIC: 163.1 Df Residuals: 16 BIC: 172.6 Df Model: 7 Covariance Type: nonrobust ========================================================================================================== coef std err t P>|t| [0.025 0.975] ---------------------------------------------------------------------------------------------------------- Intercept -24.6404 9.326 -2.642 0.018 -44.410 -4.871 Sex[T.Male] -7.3225 3.170 -2.310 0.035 -14.043 -0.602 Glasses[T.Yes] -2.4210 2.995 -0.808 0.431 -8.771 3.929 Age 0.2957 0.183 1.613 0.126 -0.093 0.684 Experience_using_a_gamepad_1_4 1.8810 1.853 1.015 0.325 -2.047 5.809 Experience_using_a_VR_headset_1_4 0.9559 3.213 0.297 0.770 -5.856 7.768 Experience_using_hand_tracking_1_3 -2.4689 3.633 -0.680 0.506 -10.170 5.232 Experience_using_controllers_in_VR_1_3 2.3592 4.840 0.487 0.633 -7.902 12.620 ============================================================================== Omnibus: 0.621 Durbin-Watson: 2.566 Prob(Omnibus): 0.733 Jarque-Bera (JB): 0.702 Skew: -0.277 Prob(JB): 0.704 Kurtosis: 2.371 Cond. No. 205. ==============================================================================
疑问:
- Sex旁的[T.Male]和Glasses旁的[T.Yes]是什么含义?该如何解读?
- 为什么输出中会添加Intercept?
- 在混杂变量分析场景下是否需要关注它?
问题解答
1. Sex[T.Male]和Glasses[T.Yes]的含义与解读
这是statsmodels对**分类变量(类别型自变量)自动做的虚拟编码(Dummy Coding)**处理:
- 对于
Sex变量,它包含Female和Male两个类别,statsmodels默认选择其中一个作为基准组(参照组),这里基准组是Female(因为结果里只显示了[T.Male])。Sex[T.Male]的系数(-7.3225)表示:在其他所有变量保持不变的情况下,男性群体的因变量CorrectGestureCounter_diff平均值比女性低7.3225,且这个差异在0.05的显著性水平下是统计显著的(P值=0.035<0.05)。 - 对于
Glasses变量,它的类别是Yes和隐含的No,基准组是No,Glasses[T.Yes]的系数(-2.4210)表示:戴眼镜的群体因变量平均值比不戴眼镜的群体低2.4210,但这个差异不显著(P值=0.431>0.05)。
简单来说,[T.类别名]代表该类别相对于基准组的差值,基准组是该变量中未出现在结果里的那个类别。
2. 为什么输出中会添加Intercept?
Intercept(截距项)是线性回归模型的默认组成部分,它代表所有自变量取基准值时,因变量的预测平均值:
- 对于连续变量(比如Age),基准值是0;
- 对于分类变量,基准值是前面提到的基准组(比如Sex的Female、Glasses的No)。
在你的模型里,截距项(-24.6404)的含义是:当Age=0、性别为Female、不戴眼镜、所有Experience类变量都取0时,因变量的预测值。虽然Age=0在现实中没有实际意义,但从数学拟合角度,它是模型的必要项,能让回归直线更好地贴合数据分布。
statsmodels的ols模型默认包含截距项,若要去掉可在公式中加-1,比如f'{metric}_diff ~ {" + ".join(confounding_variable_names)} - 1',但除非有明确统计需求,一般不建议这么做。
3. 混杂变量分析场景下是否需要关注Intercept?
在混杂变量分析中,核心目标是检验各混杂变量对因变量的影响是否显著,以及效应大小,通常情况下:
- 截距项本身的实际意义有限(尤其当自变量基准值在现实数据中不存在时,比如Age=0);
- 不需要特别关注截距项的显著性,除非你的研究问题本身聚焦于“所有混杂变量处于基准状态时的因变量水平”。
你的重点应放在各个混杂变量(如Sex、Age、各类Experience变量)的系数、P值和置信区间上,判断它们是否属于需要控制的混杂因素。
内容的提问来源于stack exchange,提问作者Wojtek Wencel
相关产品推荐
相关产品推荐

