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

Python 稳健的线性模型-没有外生变量,只有常数,python,statsmodels,Python,Statsmodels,我只对一个常数(一列1)进行稳健的线性回归,没有外生变量。我可以通过输入一个1的列表来计算模型,该列表的大小等于下面代码片段中“xiu列表”的大小 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_

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

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)
然而,我正在寻找一种更具伸缩性的方法。我在想,一种解决方案可能是包含一个循环,该循环附加的1与xiu list变量的长度一样多,但这似乎不是很有效

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


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

使用基本的numpy矢量化计算

e、 g


旁白:
rlm_结果
应该具有标准偏差的稳健估计,标准偏差在估计中用作尺度属性。

谢谢,我不知道np.ones()函数。你能详细说明一下stdev部分的稳健估计吗?我在这里搜索了一下,但什么也找不到:请参见该页属性列表中的
scale
说明。比例的估计方法是通过
scale\u est
选项选择的
statevar = np.asarray(statevar_list)
y = np.log(statevar[1:]) - np.log(statevar[:-1])
x = np.ones(len(y))