多重 OLS 估计 TypeError
Multiple OLS estimation TypeError
我正在尝试对我的数据使用 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)
当我查看数组或我的数据框时,一切看起来都很好,但它 returns 只是:TypeError: init() takes at least 2 arguments (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)。
问题是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.ols
是 sm.OLS.from_formula
的快捷方式
我正在尝试对我的数据使用 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)
当我查看数组或我的数据框时,一切看起来都很好,但它 returns 只是:TypeError: init() takes at least 2 arguments (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)。
问题是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.ols
是 sm.OLS.from_formula