稳健的线性模型 - 没有外生变量,只是常数

时间:2018-02-21 14:14:34

标签: python statsmodels

我只对一个常数(一列1s)进行稳健的线性回归,而没有外生变量。我可以通过从下面的代码片段中输入等于'xi_list'大小的1的列表来计算模型。

def sigma_and_miu(gvkey, statevar_dict):

statevar_list = statevar_dict[gvkey]

xi_list = [np.log(statevar_list[i]) - np.log(statevar_list[i-1]) for i in range(1, len(statevar_list))]

x = np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
y = np.array(xi_list)

rlm_model = sm.RLM(y, x, M=sm.robust.norms.HuberT())
rlm_results = rlm_model.fit()

sigma = np.std(rlm_results.resid * rlm_results.weights)

miudelta = rlm_results.params[0] + (0.5 * sigma ** 2)

return miudelta, sigma

使用以下输入运行此功能。

dict = {1004:[1796.6, 1938.6, 2085.4, 2009.4, 1906.1, 2002.2, 2164.9, 2478.8, 2357.4, 2662.1, 2911.2, 2400.4, 2535.9, 2812.3, 2873.1, 2775.5, 3374.2, 3345.5, 3466.3, 2409.4]}
key = 1004
miu, sigma = sigma_and_miu(key,dict)

但是,我正在寻找一种更具可扩展性的方法。我认为一个解决方案可能是包含一个循环,该循环追加xi_list变量的长度1,但这似乎不是非常有效。

我知道有sm.add_constant(),我试图将这个常量添加到我的'y'变量中,并在sm.RLM()函数中留下'x'空白。这导致无法运行模型。

所以我的问题是,是否有更好的方法来创建1的列表,还是我应该去循环?

1 个答案:

答案 0 :(得分:0)

使用基本的numpy向量化计算

e.g。

statevar = np.asarray(statevar_list)
y = np.log(statevar[1:]) - np.log(statevar[:-1])
x = np.ones(len(y))

除此之外:rlm_results应该具有对估算中使用的标准差的稳健估计作为比例属性。