【发布时间】:2018-07-24 09:32:42
【问题描述】:
我正在尝试使用 RSS 获得估计的约束系数。 beta 系数被限制在 [0,1] 和总和为 1 之间。此外,我的第三个参数被限制在 (-1,1) 之间。利用下面的方法,我可以使用模拟变量获得一个很好的解决方案,但是在我的真实数据集上实施该方法时,我一直在得出一个非唯一的解决方案。反过来,我想知道是否有一种在数值上更稳定的方法来获得我的估计参数。
set.seed(234)
k = 2
a = diff(c(0, sort(runif(k-1)), 1))
n = 1e4
x = matrix(rnorm(k*n), nc = k)
a2 = -0.5
y = a2 * (x %*% a) + rnorm(n)
f = function(u){sum((y - u[3] * (x %*% u[1:2]))^2)}
g = function(v){
v1 = v[1]
v2 = v[2]
u = vector(mode = "double", length = 3)
# ensure in (0,1)
v1 = 1 / (1 + exp(-v1))
# ensure add up to 1
u[1:2] = c(v1, 1 - sum(v1))
# ensure between [-1,1]
u[3] = (v2^2 - 1) / (v2^2 + 1)
u
}
res = optim(rnorm(2), function(v) f(g(v)), hessian = TRUE, method = "BFGS")
eigen(res$hessian)$values
res$convergence
rbind(Est = res$par, SE = sqrt(diag(solve(res$hessian))))
rbind(g(res$par),c(a,a2))
向http://zoonek.free.fr/blosxom/R/2012-06-01_Optimization.html致敬
【问题讨论】:
-
当stackoverflow.com/users/1129973/vincent-zoonekynd 说明htat 页面上的sum-to-one 约束时,他使用了
quadprog。也许他会出现并帮助你。 -
@42- 很有帮助
-
@user5087936 请看下面我的示例,了解如何在 Stan/RStan 中实现具有约束参数的模型。了解模型在您的真实数据上的表现会很有趣。
标签: r optimization constraints regression