使用R在线性模型中设置约束

使用R在线性模型中设置约束,r,R,我试图用下面的线性模型预测未来的市场份额 x <- c(20, 60, 80,130) y <- c(0.8, 0.15,0.05, 0.0) z <-data.frame(x, y) z.fit <- lm(y~x, data=z) z.prediction <- predict(z.fit, data.frame(x=c(30, 65, 70, 100)), interval="prediction") 如何在代码中设置

我试图用下面的线性模型预测未来的市场份额

    x <- c(20, 60, 80,130)
    y <- c(0.8, 0.15,0.05, 0.0)
    z <-data.frame(x, y)
    z.fit <- lm(y~x, data=z)
    z.prediction <- predict(z.fit, data.frame(x=c(30, 65, 70, 100)), interval="prediction")

如何在代码中设置“共享”之和=1的约束

问题没有定义共享,但假设是拟合值,请尝试CVXR软件包。请注意,已添加非负性约束,但如果可以接受负值,则可以删除该约束

library(CVXR)

b <- Variable(2)
pred <- b[1] + b[2] * x

objective <- Minimize(sum((y - pred)^2))
constraints <- list(sum(pred) == 1, pred >= 0)
problem <- Problem(objective, constraints)
soln <- solve(problem)

bval <- soln$getValue(b)

bval
##              [,1]
## [1,]  0.565217391
## [2,] -0.004347826

# check constraints

predval <- soln$getValue(pred)
round(predval, 5)
##         [,1]
## [1,] 0.47826
## [2,] 0.30435
## [3,] 0.21739
## [4,] 0.00000

sum(predval)
## [1] 1
库(CVXR)

b你试过调整你的结果吗。看起来有点懒,但如果你只需要调整市场份额,这可能有效吗?可能会有帮助,但不确定你的用途。a代码处理了我的数据。非常感谢你的帮助。
library(CVXR)

b <- Variable(2)
pred <- b[1] + b[2] * x

objective <- Minimize(sum((y - pred)^2))
constraints <- list(sum(pred) == 1, pred >= 0)
problem <- Problem(objective, constraints)
soln <- solve(problem)

bval <- soln$getValue(b)

bval
##              [,1]
## [1,]  0.565217391
## [2,] -0.004347826

# check constraints

predval <- soln$getValue(pred)
round(predval, 5)
##         [,1]
## [1,] 0.47826
## [2,] 0.30435
## [3,] 0.21739
## [4,] 0.00000

sum(predval)
## [1] 1