我使用F#中的R
类型提供程序来访问一些与回归相关的R功能。 我想估计回归系数有约束时的回归,因此它们的加权平均值为0. 权重总和为1.下面的例子被简化,因为我有几十个系数,不同的权重,我只显示下面的R代码:
y1 <- runif(n = 50,min = 0.02,max=0.05)
y2 <- runif(n=50,min=0.01,max=0.03)
y <- c(x1,x2)
x1 <- c(rep(0,50),rep(1,50))
x2 <- c(rep(1,50),rep(0,50))
lm(y~x1+x2)
这给出了
的输出> lm(y~x1+x2)
Call:
lm(formula = y ~ x1 + x2)
Coefficients:
(Intercept) x1 x2
0.03468 -0.01460 NA
正如所料。但是我想对x1和x2设置约束,因此它们的加权平均值为(0.5 * x1 + 0.5 * x2) = 0
。在这种情况下,截距变为mean(y) = 0.02737966
,x1和x2系数将显示该值的偏移量(分别为-0.006
和+0.007
)。软件包quadprog
和mgcv
似乎适用,但我无法应用约束。
答案 0 :(得分:0)
也许不完全是你问题的答案,因为它要求在R中进行优化。但是可能以下有帮助。无论如何它使用NLopt库我认为是R使用的?如果您在制定MLE方面需要帮助,请告诉我,但对于具有高斯假设且没有内生性的线性模型,它应该足够直接。
请注意,即使LN_COBYLA不使用用户提供的渐变,与cFunc和oFunc中的模式匹配也会忽略它。我尝试使用LD_LBFGS,但不支持AddEqualZeroConstraint()。
[编辑]
添加完整示例,您可以将其用作模板。它不是惯用的,而且非常难看,但说明了这一点。但是,在此示例中,约束将导致此退化。您需要NLOptNet,MathNet.Numerics,Fsharp Charting。也许它有助于其他人在F#中进行约束优化。
{{1}}