问题:
如何使用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拾取该数据框,然后进一步运行代码段...
您可以使用分类的pandas创建虚拟变量,或更简单的方法是使用公式接口,其中patsy将所有非数字列转换为虚拟变量或其他因子编码。