我正在尝试使用以下线性模型预测未来的市场份额。
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,请参见以下内容:
fit
1 0.544
2 0.301
3 0.267
4 0.059
如何在代码中为“ Share” = 1的总和设置约束?
答案 0 :(得分:1)
该问题未定义 Share ,但假设它是拟合值,请尝试使用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