【问题标题】:Pandas: OLS regression does not output an interceptPandas:OLS回归不输出截距
【发布时间】:2016-09-03 10:29:42
【问题描述】:

我从 Pandas 汇集的 OLS 回归中得到以下输出。唯一的问题是我不确定拦截在哪里。在回归中,总是有一个通常列在外生变量之前的截距,即Y = a + ßx1 + ßx2 + error_term我在回归中看不到它。我使用了来自 ayhan X = add_constant(X) 的建议,但不知何故,我觉得我在用语法弄乱了一些东西(以一种明显的方式)。我知道这不是火箭科学。谁能告诉我我错过了什么?

import numpy as np
import pandas as pd
from pandas import DataFrame, Series
import statsmodels.formula.api as sm
from sklearn.linear_model import LinearRegression
import scipy, scipy.stats
import matplotlib.pyplot as plt
import matplotlib
matplotlib.style.use('ggplot')
from statsmodels.api import add_constant



 X = add_constant(X)
Y = df['billsum_support']

X = df[['direct_expenditures','indirect_expenditures', 'years_exp', 'leg_totalbills',\
    'log_diff_rgdp', 'unemployment',  'expendituresfor']]

result = sm.OLS( Y, X ).fit()
result.summary()

 OLS Regression Results Dep. Variable:  billsum_support     R-squared:  0.663
Model:  OLS     Adj. R-squared:     0.663
Method:     Least Squares   F-statistic:    3932.
Date:   Sun, 08 May 2016    Prob (F-statistic):     0.00
Time:   22:38:33    Log-Likelihood:     -12561.
No. Observations:   12008   AIC:    2.513e+04
Df Residuals:   12002   BIC:    2.518e+04
Df Model:   6       
Covariance Type:    nonrobust       
    coef    std err     t   P>|t|   [95.0% Conf. Int.]
direct_expenditures     4.575e-05   4.02e-06    11.377  0.000   3.79e-05 5.36e-05
indirect_expenditures   -2.147e-05  6.93e-06    -3.099  0.002   -3.5e-05 -7.89e-06
years_exp   0.0030  0.001   5.595   0.000   0.002 0.004
leg_totalbills  0.0052  0.000   11.160  0.000   0.004 0.006
log_diff_rgdp   1.0325  0.178   5.805   0.000   0.684 1.381
unemployment    0.1052  0.001   70.744  0.000   0.102 0.108
expendituresfor     2.428e-05   3.57e-06    6.797   0.000   1.73e-05 3.13e-05
Omnibus:    2994.033    Durbin-Watson:  0.837
Prob(Omnibus):  0.000   Jarque-Bera (JB):   19159.354
Skew:   1.042   Prob(JB):   0.00
Kurtosis:   8.827   Cond. No.   1.54e+16

【问题讨论】:

    标签: python pandas ipython regression


    【解决方案1】:

    您需要明确告诉 statsmodels 适合截距。使用statsmodels.api.add_constant 更新您的自变量:

    from statsmodels.api import add_constant
    Y = df['billsum_support']
    X = df[['direct_expenditures','indirect_expenditures', 'years_exp', 'leg_totalbills',\
        'log_diff_rgdp', 'unemployment',  'expendituresfor']]
    X = add_constant(X)
    result = sm.OLS( Y, X ).fit()
    

    【讨论】:

    • 感谢您的评论!我收到以下错误:AttributeError: module 'statsmodels.formula.api' has no attribute 'add_constant'
    • @MichaelPerdue 抱歉,我以为sm 指的是statsmodels.api。我已经更新了我的答案。
    • 再次感谢您的评论。我将更新我的问题以显示我用于实施您的建议的代码。
    • @MichaelPerdue 您需要在切片数据帧后添加常量。请检查更新的答案。
    • 宾果游戏!感谢您一直支持我!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 2020-04-12
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 2018-11-21
    • 2022-01-09
    相关资源
    最近更新 更多