我已经设置了一个小函数,它接受了一个pandas DataFrame和一些参数,然后尝试使用statsmodels创建一个OLS回归。它的设计允许我从循环中调用它,使用一些简单的代码运行许多不同的回归。不幸的是,它不起作用,我很欣赏一些关于我需要做些什么才能让它发挥作用的指导。这是功能:
def regressReturns(rawData, predictor, horizon):
x = rawData.eval(predictor)
x = sm.add_constant(x)
y = rawData.eval(str(horizon) + '_Yr_Return')
results = sm.OLS(y,x).fit()
return results.params
如果我从循环中调用它,我只会得到语法错误:
for rh in retunHorizons:
regressReturns(rawData,'Earnings_Yield', rh)
我做错了什么?此外,我是一个熊猫新手,所以一个例子和一个解释将非常感激。
预先感谢您的协助。
Thomas Philips
答案 0 :(得分:1)
我假设rawData是您的DataFrame,而您在evals中拥有的是您尝试访问的列的名称。如果是这种情况,以下内容将起作用:
x = rawData[predictor]
y = rawData[str(horizon) + '_Yr_Return']
可以使用as属性和dict来访问列。第一种方法更简洁,但如果你想将变量用作列名,第二种方法会更灵活。
答案 1 :(得分:0)
您可以直接使用pandas进行OLS:
from pandas.stats.api import ols
def regressReturns(rawData, predictor, horizon):
rawData.dropna(inplace=True)
results = ols(y=rawData[str(horizon) + '_Yr_Return'] ,
x=rawData[predictor])
return res.sm_ols.params