平日为使用statsmodels的线性回归模型中的虚拟/因子变量

问题描述 投票:0回答:1

问题:

如何使用sm.OLS()向模型添加虚拟/因子变量?

详细信息

下面是可复制的数据框,您可以使用ctrl + C拾取,然后将代码段进一步向下移动以产生可复制的示例。

输入数据:

Date    A   B   weekday
2013-05-04  25.03   88.51   Saturday
2013-05-05  52.98   67.99   Sunday
2013-05-06  39.93   75.19   Monday
2013-05-07  47.31   86.99   Tuesday
2013-05-08  19.61   87.94   Wednesday
2013-05-09  39.51   83.10   Thursday
2013-05-10  21.22   62.16   Friday
2013-05-11  19.04   58.79   Saturday
2013-05-12  18.53   75.27   Sunday
2013-05-13  11.90   75.43   Monday
2013-05-14  47.64   64.76   Tuesday
2013-05-15  27.47   91.65   Wednesday
2013-05-16  11.20   59.83   Thursday
2013-05-17  25.10   67.47   Friday
2013-05-18  19.89   64.70   Saturday
2013-05-19  38.91   76.68   Sunday
2013-05-20  42.11   94.36   Monday
2013-05-21  7.845   73.67   Tuesday
2013-05-22  35.45   76.67   Wednesday
2013-05-23  29.43   79.05   Thursday
2013-05-24  33.51   78.53   Friday
2013-05-25  13.58   59.26   Saturday
2013-05-26  37.38   68.59   Sunday
2013-05-27  37.09   67.79   Monday
2013-05-28  21.70   70.54   Tuesday
2013-05-29  11.85   60.00   Wednesday

使用statsmodels进行回归分析的代码:

以下使用sm.ols()在A上创建B的线性回归模型(包括使用sm.add_constant()的常数项)

import pandas as pd
import statsmodels.api as sm

df = pd.read_clipboard(sep='\\s+')
df = df.set_index(['Date'])

df['weekday'] =  df['weekday'].astype(object)
independent = df['B'].to_frame()
x = sm.add_constant(independent)

model = sm.OLS(df['A'], x).fit()
model.summary()

输出(缩短):

                 coef    std err          t      P>|t|      [95.0% Conf. Int.]
------------------------------------------------------------------------------
const         -1.4328     17.355     -0.083      0.935       -37.252    34.386
B              0.4034      0.233      1.729      0.097        -0.078     0.885
==============================================================================

现在,我想添加工作日作为解释性因素变量。我希望这和更改数据帧中的数据类型一样容易,但是不幸的是,尽管x = sm.add_constant(independent)部分接受了该列,但这似乎不起作用。

import pandas as pd
import statsmodels.api as sm

df = pd.read_clipboard(sep='\\s+')
df = df.set_index(['Date'])

df['weekday'] =  df['weekday'].astype(object)

independent = df[['B', 'weekday']]
x = sm.add_constant(independent)

model = sm.OLS(df['A'], x).fit()
model.summary()

[当您进入model = sm.OLS(df['A'], x).fit()部分时,出现值错误:

ValueError: Pandas data cast to numpy dtype of object. Check input data with np.asarray(data).

还有其他建议吗?

问题:如何使用sm.OLS()向模型添加虚拟/因子变量?下面的详细信息是可复制的数据框,您可以使用ctrl + C拾取该数据框,然后进一步运行代码段...

python regression statsmodels dummy-variable
1个回答
1
投票

您可以使用分类的pandas创建虚拟变量,或更简单的方法是使用公式接口,其中patsy将所有非数字列转换为虚拟变量或其他因子编码。

© www.soinside.com 2019 - 2024. All rights reserved.