我肯定漏掉了一些东西,但我所要做的就是运行一个带有多个变量的基本线性回归。问题是变量有自定义的边界(有些是0->;1,其他可能不同)。我想看看这个解的系数,它有一个statsmodels.api
的t和P值的输出。在
我可以用summary()
来运行statsmodels.api.OLS
,但我似乎不能限制变量的边界是非负的。在
我可以运行scipy.optimize.nnls
,但这并没有给我任何关于每个变量置信度的输出。在
我也尝试过用bounds
参数来scipy.optimize.lsq_linear
,但这似乎并不是我所期望的那样有效。在
我如何组合这些函数来得到我想要的?例如:
Ys = [1,2,3,4]
Xs = [[4,2,6,4], [6,2,1,4], [1,2,4,9]]
bounds = [[0,1], [0,1], [0,5], [0.2,0.4]]
期望输出:
^{pr2}$所有的系数都符合边界。在
scipy有一个特殊的优化器,nnls。
问题是标准错误和推理不规范,一般情况下不容易实现。(我还没有弄清楚如何获得标准错误。)
https://github.com/statsmodels/statsmodels/issues/1211
我在不需要标准错误的情况下使用了nnls,它工作得很好。
对于不等式或边界约束,还有第二个用例,它们在优化过程中是必需的,但是,结果通常是内部的。这些情况可以通过重新参数化处理,并用于多种情况,例如离散或广义线性模型的log或logit链接函数或方差函数估计。如果最佳值在内部,则应用标准推理。
编辑
获得“近似”标准误差的一种方法是用适当的优化器找到不等式约束问题的参数,然后在估计标准模型(如OLS)时施加约束。对于非负约束,估计参数在零界的变量可以被丢弃。也就是说,我们将具有约束力的不等式约束视为等式约束。
然而,在这种情况下计算的标准误差是在假设下进行的,即我们知道哪些约束是约束的,并且不考虑不等式约束的不确定性,这些约束可能是约束的,也可能不是约束的。
如果您可以使用R,我想您也可以使用
bbmle
的mle2
函数来优化最小二乘似然函数,并计算非负nnls系数的95%置信区间。此外,通过优化系数的对数,可以考虑到系数不能变为负值,这样在反向转换的比例下,它们永远不会变为负值。这是一个数值例子,说明了这种方法,这里的背景是反褶积高斯形状的色谱峰与高斯噪声的叠加:(欢迎评论)
首先让我们模拟一些数据:
现在让我们用一个包含已知高斯形状模糊核的移位拷贝的带状矩阵来反褶积测量的噪声信号
y
(这是我们的协变量/设计矩阵)。首先,让我们用非负最小二乘法对信号进行反褶积:
^{pr2}$现在,让我们优化高斯损失目标的负对数可能性,并优化系数的对数,以便在回溯变换的尺度上,它们永远不会是负的:
我还没有尝试比较这种方法相对于非参数或参数引导的性能,但它肯定要快得多。
我也倾向于认为,我应该能够计算基于信息矩阵的非负nnls系数的Wald置信区间,在对数变换尺度下计算,以加强非负性约束,并在nnls估计值上进行评估。 我想是这样的:
这些计算的结果和
mle2
返回的结果几乎相同(但要快得多),所以我认为这是正确的,并且与我们隐式使用mle2
所做的事情相对应。。。在
nnls
拟合中,仅仅用一个规则的线性模型拟合来重新拟合具有正系数的协变量是行不通的,因为这样的线性模型拟合不会考虑非负性约束,因此会导致无意义的置信区间变为负值。 本文还提出了一种对非负nnls(或LASSO)系数进行模型选择后推断的方法,并使用截断高斯分布进行推断。不过,我还没有看到这种方法在nnls-fits中公开可用的实现——对于LASSO-fits,有一个selectiveInference包可以做类似的事情。如果有人碰巧有一个实现,请告诉我!相关问题 更多 >
编程相关推荐