多个OLS估计TypeError

时间:2015-04-20 10:08:17

标签: python finance estimation quantitative-finance economics

我正在尝试使用我的数据上的statsmodel来做一些Newey-West OLS以估计我的参数,以下是我的代码:

from __future__ import print_function, division 
import xlrd as xl
import numpy as np
import scipy as sp
import pandas as pd
import statsmodels.formula.api as smf
import statsmodels.api as sm

file_loc = "/Python/dataset_3.xlsx"
workbook = xl.open_workbook(file_loc)
sheet = workbook.sheet_by_index(0)
tot = sheet.nrows
data = [[sheet.cell_value(r, c) for c in range(sheet.ncols)] for r in 

range(sheet.nrows)]

rv1 = []
rv5 = []
rv22 = []
rv1fcast = []
T = []
price = []
time = []
retnor = []

for i in range(1, tot):        
    t = data[i][0]
    ret = data[i][1]
    ret5 = data[i][2]
    ret22 = data[i][3]
    ret1_1 = data[i][4]
    retn = data[i][5]
    t = xl.xldate_as_tuple(t, 0)
    rv1.append(ret)
    rv5.append(ret5)
    rv22.append(ret22)
    rv1fcast.append(ret1_1)
    retnor.append(retn)
    T.append(t)

df = pd.DataFrame({'RVFCAST':rv1fcast, 'RV1':rv1, 'RV5':rv5, 'RV22':rv22,})
df = df[df.RV1.notnull()]
model = smf.OLS(formula = 'df.RVFCAST ~ df.RV1 + df.RV5 + df.RV22', data = df)

当我查看数组或我的数据帧时,一切看起来都很好,但它只返回:TypeError: init ()至少需要2个参数(给定1个)

我尝试了很多不同的方法,但我看不出我错过了什么。

当我运行它时,以下错误消息显示:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/Python/harrv.py in <module>()
     41 df = df[df.RV1.notnull()]
     42 
---> 43 model = smf.OLS(formula = 'df.RVFCAST ~ df.RV1 + df.RV5 + df.RV22', data = df)
     44 
     45 #mdl = model.get_robustcov_results(cov_type='HAC',maxlags=1)

TypeError: __init__() takes at least 2 arguments (1 given) 

打印rv1为您提供:

Out[318]: 
[0.015538008996147568,
 0.008881670570720125,
 0.010421778063375802,    
.....    
 0.003151044550868834,
 0.0029676428110974166,
 0.005236329928710288,
 0.004838460533164701,
 '']

另一个rv给出了similair浮点数。 df只是以pd.dataframe的方式组装它们,根据文档支持(http://statsmodels.sourceforge.net/devel/example_formulas.html)。

1 个答案:

答案 0 :(得分:2)

问题是statsmodels.formula.api中的公式函数是小写的。大写OLS与主statsmodels.api中的相同。将来会从formula.api命名空间中删除大写模型,以避免这种混淆。

这意味着,您需要使用小写ols,如

model = smf.ols(formula = 'df.RVFCAST ~ df.RV1 + df.RV5 + df.RV22', data = df)

注意,小写公式函数只是模型的from_formula方法的别名。

smf.olssm.OLS.from_formula

的快捷方式