我正在做一些实验,我当然知道为什么很少需要约束系数,但这里开始。
在下面的数据中,我使用了quadprog来求解一个线性模型。请注意,X1只是一个截取。
X1 <- 1
X2 <- c(4.374, 2.3708, -7.3033, 12.0803, -0.4098, 53.0631, 13.1304, 7.3617, 16.6252, 27.3394)
X3 <- c(2.6423, 2.6284, 36.9398, 15.9278, 18.3124, 54.5039, 3.764, 19.0552, 25.4906, 13.0112)
X4 <- c(4.381, 3.144, 9.506, 15.329, 21.008, 38.091, 22.399, 13.223, 17.419, 19.87)
X <- as.matrix(cbind(X1,X2,X3,X4))
Y <- as.matrix(c(37.7,27.48,24.08,25.97,16.65,73.77,45.10,53.35,61.95,71.15))
M1 <- solve.QP(t(X) %*% X, t(Y) %*% X, matrix(0, 4, 0), c())$solution挑战是使某些系数受到约束。我知道我应该修改Amet和bvac参数(根据Linear regression with constraints on the coefficients)。但是,我不确定如何设置它,以便满足以下限制。
输出为1 37.3468790 1.2872473 -0.0177749 -0.5988443,其中预测值将拟合X1、X2、X3和X4的值。
约束(受制于)…
X2 <= .899
0 <= X3 <= .500
0 <= X4 <= .334发布于 2018-08-31 07:57:21
只是为了澄清一下:你给出了一个期望的输出,其中的值将被预测为符合X1,X2,X3和X4的值。。我假设您指的是 estimated (not Not)参数值。
在rstan中建模数据时,实现受约束的参数非常简单。rstan是Stan的R接口,而后者又是一种用于统计贝叶斯推理的概率编程语言。
下面是一个基于您提供的示例数据的示例。
beta2、beta3和beta4进行了约束。model <-“data { int n;//观察数int k;//参数矩阵n,k X的数;//数据向量y;//响应}参数{ beta1;// X1无约束real beta2;// X2 <= .899 real beta3;// 0 <= X3 <= 0.5 real beta4;// 0 <= X4 <= 0.334实σ;//残差}模型{ //似然y~正态(beta1* X,1+ beta2 * X,2+ beta3 * X,3+ beta4 * X,4,sigma);}“
库(Rstan) rstan_options(auto_write = TRUE)选项(mc.cores= parallel::detectCores()) df <- cbind.data.frame(Y,X) fit <- stan( model_code =模型,数据=列表(n= nrow(df),k= ncol(df,-1),X= df,-1,y= df,1))
书库(扫把)整齐(适合,conf.int = TRUE) ## A tibble: 5 x 5# term estimate std.error conf.low conf.high #1 beta1 29.2 6.53 16.9 42.8 #2 beta2 0.609 0.234 0.0149 0.889 #3 beta3 0.207 0.138 0.00909 0.479 #4 beta4 0.164 0.0954 0.00780 .326 #5 sigma 16.2 5.16 9.42 29.1
我们还可以绘制包括CI在内的参数估计。
请注意,参数估计与施加的约束是一致的。

https://stackoverflow.com/questions/52105064
复制相似问题