【问题标题】:Multiple OLS estimation TypeError多重OLS估计TypeError
【发布时间】:2015-04-20 10:08:16
【问题描述】:

我正在尝试对我的数据使用 statsmodels 做一些 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 给出了类似的浮点数。 df 只是以 pd.dataframe 的方式组装它们,根据文档支持 (http://statsmodels.sourceforge.net/devel/example_formulas.html)。

【问题讨论】:

  • 如果您编写包含堆栈跟踪的实际错误消息会有所帮助。根据您目前的描述,不清楚是什么调用崩溃了。
  • 就是这样。但我看不出还需要更多种类的论据,因为我从另一个例子中采用了这种方法,该方法适用于那个人。我在想,可能是因为列表中存在单引号吗?
  • 使用df. 作为公式参数显然是错误的。 (与statsmodels.sourceforge.net/devel/example_formulas.html 比较)。但我承认我没有看到错误消息与您的论点之间存在关联。如果您可以使示例自包含,这将有所帮助。例如。添加import 语句和示例数据。
  • 已修复。我希望 rv1 示例就足够了,因为另一个示例以相同的方式组装并且也只是浮动。
  • 更改 df.公式的一部分仍然显示相同的错误消息。

标签: python finance estimation quantitative-finance economics


【解决方案1】:

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

也就是说,你需要使用小写的ol,如

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

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

smf.olssm.OLS.from_formula 的快捷方式

【讨论】:

  • 成功了!但是当我尝试打印拟合模型的摘要时,当 a 和权重的形状不同时,它会返回关于需要指定的轴的错误。你对此有什么想法吗?
  • 如果没有回溯或完整示例,我无法猜测。您可以提出新问题或在 pystatsmodels google 小组中提问。一件事:将df. 放在公式字符串中。我们(statsmodels 开发人员)从未考虑过这种模式,我不确定它是否能正常工作。它很可能会扰乱patsys 设计矩阵的创建或估计后处理。
  • 我在这里发布了第二个更详细的问题:stackoverflow.com/questions/29799161/…
猜你喜欢
  • 2014-04-30
  • 1970-01-01
  • 2017-11-29
  • 2020-11-25
  • 1970-01-01
  • 2019-04-17
  • 2021-03-09
  • 1970-01-01
  • 2018-06-19
相关资源
最近更新 更多