[英]Weighted nonnegative least squares in R
1)nnls是的,这是等效的,因为加权最小二乘最小化了:
sum( w * (Y - X %*% beta)^2 )
= sum_i( (sqrt(w[i]) * X[i, ] %*% beta - sqrt(w[i]) * Y[i])^2 )
受约束,其中sum_i表示对i的总和。 因此sqrt(w[i])
将X的第i行和Y的第i个元素相乘,这等效于使用sqrt(w) * X
和sqrt(w) * Y
(请注意,它们也分别等于diag(sqrt(w)) %*% X
和c(diag(sqrt(w)) %*% Y)
。)
2)CVXR CVXR软件包可以直接进行加权的非负最小二乘法。 在其插图中有一个执行非负最小二乘的示例。
vignette("cvxr_intro")
只需在代码中更改目标即可增加权重:
objective <- Minimize(sum((w *(Y - X %*% betaHat)^2)))
3)如果您使用下限全为0的port
算法,则R附带的nls
可以执行非负加权最小二乘。(在下面的代码中,我们从零开始,通常不要从零开始边界,但考虑到这里的线性度就没关系了。)
zeros <- numeric(ncol(X))
nls(Y ~ X %*% b, start = list(b = zeros), weights = w, lower = zeros, alg = "port")
运行所有三种方法来仔细检查答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.