установить ограничения в линейной модели, используя R - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь предсказать будущую долю рынка, используя следующую линейную модель.

    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

Как установить ограничениев коде для суммы «Поделиться» = 1?

1 Ответ

0 голосов
/ 25 сентября 2018

Вопрос не определил Доля , но, предполагая, что это подходящие значения, попробуйте пакет 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...