首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用statsmodel约束OLS (或WLS)系数

使用statsmodel约束OLS (或WLS)系数
EN

Stack Overflow用户
提问于 2020-11-17 05:36:35
回答 1查看 199关注 0票数 1

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

这最终是一个简单的加权OLS。(请注意,将w指定为错误权重数组实际上与sm.WLS在sm.GLM中的工作方式相同,尽管文档中没有它)。

我使用GLM是因为它允许我使用fit_constrained()来适应一些额外的约束。我的X由6个独立变量组成,其中2个我想将结果系数限制为正。但是我似乎找不出让fit_constrained()工作的语法。文档极其空洞,我在任何地方都找不到任何好的例子。我真正需要的是输入这些约束的正确语法。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-11 02:39:52

你看到的函数是用于linear constraints的,也就是你的系数的组合满足一些线性等式,而不是用来定义边界。

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

代码语言:javascript
运行
复制
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)

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

代码语言:javascript
运行
复制
def fun(b, x, y):
    return b[0] + np.matmul(x,b[1:]) - y

第一个系数是截距。假设我们要求第二个和第六个总是为正:

代码语言:javascript
运行
复制
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))

然后我们检查结果:

代码语言:javascript
运行
复制
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])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64866085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档