【问题标题】:Specifying a Constant in Statsmodels Linear Regression?在 Statsmodels 线性回归中指定常数?
【发布时间】:2014-12-19 12:24:48
【问题描述】:

我想使用 statsmodels.regression.linear_model.OLS 包做一个预测,但有一个指定的常数。

目前,我可以用参数指定常量的存在:

(来自文档:http://statsmodels.sourceforge.net/devel/generated/statsmodels.regression.linear_model.OLS.html

class statsmodels.regression.linear_model.OLS(endog, exog=None, missing='none', hasconst=None),其中 hasconst 是一个布尔值。

我想要做的是明确指定一个常数 C,然后围绕它拟合一个线性回归模型。通过使用该 OLS,我想生成一个然后访问所有属性,如 resid 等。

当前的次优解决方法是指定不带常量的 OLS,从 Y 值中减去常量,并创建一个自定义对象,每次我想都包装指定的常量和不带常量的 OLS做预测或拟合,首先从 Y 变量中减去常数,然后使用预测。

谢谢!

【问题讨论】:

    标签: python regression linear-regression statsmodels


    【解决方案1】:

    如果您将formula API 用于 statsmodels,您可以更简洁地指定常量截距作为 Patsy 设计矩阵规范的一部分。这仍然有点老套——它基本上只是表达你提出的解决方案的一种更简洁的方式——但至少它更短。例如:

    >>> import statsmodels.formula.api as smf
    >>> import pandas as pd
    >>> import numpy as np
    >>> c = 3.1416
    >>> df = pd.DataFrame(np.random.rand(10, 2), columns=['x', 'y'])
    >>> ols = smf.ols('y - c ~ 0 + x', data=df)
    >>> result = ols.fit()
    >>> print result.summary()
    ...
    ==============================================================================
                     coef    std err          t      P>|t|      [95.0% Conf. Int.]
    ------------------------------------------------------------------------------
    x              0.7404      0.230      3.220      0.010         0.220     1.261
    ==============================================================================
    

    如您所见,截距没有系数,x 的最佳斜率不是 1。

    【讨论】:

      猜你喜欢
      • 2013-05-15
      • 1970-01-01
      • 1970-01-01
      • 2018-04-24
      • 2018-01-13
      • 1970-01-01
      • 1970-01-01
      • 2016-11-21
      • 2017-12-31
      相关资源
      最近更新 更多