我肯定漏掉了一些东西,但我所要做的就是用多个变量运行一个基本的线性回归。关键是变量有自定义边界(有些是0->1,其他可能不同)。我想看看解的系数,以及t和P值的输出。
我可以用一个statsmodels.api来运行statsmodels.api.OLS,但是我似乎不能将变量的边界限制为非负。
我可以运行summary(),但这并不能给出关于每个变量可信度的任何输出。
我也尝试过使用scipy.optimize.nnls参数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]]

期望输出:
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const          1.3292      0.585     -2.274      0.024      -2.483      -0.176
x1             0.0184      0.010      1.859      0.065      -0.001       0.038
x2             0.0253      0.006      4.462      0.000       0.014       0.036
x3             0.0309      0.192      0.057      0.955      -0.368       0.390

所有的系数都符合界限。

最佳答案

对于这种情况,scipy有一个特殊的优化器nnls。
问题是标准误差和推理不规范,一般情况下不易实现。(我还没有弄清楚如何获得标准错误。)
https://github.com/statsmodels/statsmodels/issues/1211
我使用nnls的情况下,我不需要标准错误,它的工作良好。
第二种情况是在优化过程中需要不等式或边界约束,然而,结果通常在内部。这些情况可以通过重新参数化来处理,并在一些情况下使用,例如用于离散或广义线性模型或用于方差函数估计的log或logit链接函数。如果最优值在内部,则应用标准推断。
编辑
获得“近似”标准误差的一种方法是用适当的优化器找到不等式约束问题的参数,然后施加约束,从而在估计OLS等标准模型时具有约束力。对于非负性约束,参数估计值为零的变量可以删除。也就是说,我们将约束的不等式约束视为等式约束。
然而,在这种情况下,计算出的标准误差是假设我们知道哪些约束是有约束力的,并且没有考虑不等式约束的不确定性,这些不确定性可能有约束力,也可能没有约束力。

关于python - 具有t值的Python非负线性回归,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48252846/

10-15 07:34