R

时间:2016-07-21 04:47:51

标签: r f# regression mathdotnet nlopt

我使用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)。软件包quadprogmgcv似乎适用,但我无法应用约束。

1 个答案:

答案 0 :(得分:0)

也许不完全是你问题的答案,因为它要求在R中进行优化。但是可能以下有帮助。无论如何它使用NLopt库我认为是R使用的?如果您在制定MLE方面需要帮助,请告诉我,但对于具有高斯假设且没有内生性的线性模型,它应该足够直接。

请注意,即使LN_COBYLA不使用用户提供的渐变,与cFunc和oFunc中的模式匹配也会忽略它。我尝试使用LD_LBFGS,但不支持AddEqualZeroConstraint()。

[编辑]

添加完整示例,您可以将其用作模板。它不是惯用的,而且非常难看,但说明了这一点。但是,在此示例中,约束将导致此退化。您需要NLOptNet,MathNet.Numerics,Fsharp Charting。也许它有助于其他人在F#中进行约束优化。

{{1}}