使用statsmodels约束OLS(或WLS)系数

2024-10-01 13:25:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个回归形式model = sm.GLM(y, X, w = weight)

结果是一个简单的加权最小二乘法。(请注意,将w指定为错误权重数组实际上在sm.GLM中的工作方式与sm.WLS中的工作方式相同,尽管文档中未包含该数组)

我使用GLM是因为这允许我使用fit_constrated()来适应一些额外的约束。我的X由6个自变量组成,其中2个我想约束得到的系数为正。但我似乎无法理解使fit_constrained()工作的语法。文档非常简单,我在任何地方都找不到任何好的例子。我真正需要的是输入这些约束的正确语法。谢谢


Tags: 文档model错误方式语法数组形式fit
1条回答
网友
1楼 · 发布于 2024-10-01 13:25:00

您看到的函数是针对linear constraints的,即系数的组合满足一些线性等式,而不是用于定义边界

最接近的方法是使用scipy least squares并定义边界,例如,我们设置了一些具有6个系数的数据集:

from scipy.optimize import least_squares
import numpy as np

np.random.seed(100)
x = np.random.uniform(0,1,(30,6))
y = np.random.normal(0,2,30)

基本矩阵乘法和返回误差的函数:

def fun(b, x, y):
    return b[0] + np.matmul(x,b[1:]) - y

第一个系数是截距。比如说,我们要求第二个和第六个总是积极的:

res_lsq = least_squares(fun, [1,1,1,1,1,1,1], args=(x, y),
                        bounds=([-np.inf,0,-np.inf,-np.inf,-np.inf,-np.inf,0],+np.inf))

我们检查结果:

res_lsq.x

array([-1.74342242e-01,  2.09521327e+00, -2.02132481e-01,  2.06247855e+00,
       -3.65963504e+00,  6.52264332e-01,  5.33657765e-20])

相关问题 更多 >