Смешанное целочисленное программирование R: Наименьшее абсолютное отклонение с затратами, связанными с каждым регрессором - PullRequest
0 голосов
/ 09 ноября 2018

Мне представили проблему, касающуюся минимизации абсолютной ошибки, проблему, известную как LAD (наименьшее абсолютное отклонение), но, поскольку каждый регрессор является результатом дорогостоящего теста с соответствующей стоимостью, следует воздержаться от использования регрессоров. это не объясняет дисперсию в высокой степени. Требуются следующие уравнения:

enter image description here

Где N - общее количество наблюдений, E - отклонение, связанное с наблюдением i, S - количество независимых переменных, лямбда - штрафной коэффициент для стоимости, а C - стоимость, связанная с выполнением теста.

Пока я ориентируюсь как обычно. Чтобы сделать его линейным, я преобразовал абсолютное значение в две ошибки, e ^ + и e ^ -, где e = y_i- (B_0 + sum (B_j * X_ij) и следующие ограничения:

  • z_j = {0,1}, двоичное значение о том, входит ли регрессор в мою модель.

  • B_i <= M_zj; B_i> = - M_zj

  • E ^ +, E ^ -> = 0

Подмножество данных, над которыми я работаю, имеет следующую структуру: Для тебя

 quality
1       5
2       5
3       5
4       6
5       7
6       5

Для регрессоров

fixed.acidity volatile.acidity citric.acid
1           7.5            0.610        0.26
2           5.6            0.540        0.04
3           7.4            0.965        0.00
4           6.7            0.460        0.24
5           6.1            0.400        0.16
6           9.7            0.690        0.32

И за стоимость

fixed.acidity volatile.acidity citric.acid
1          0.26              0.6        0.52

Пока мой код выглядит так:

# loading the matrixes
y <- read.csv(file="PATH\\y.csv", header = TRUE, sep = ",") #dim=100*11
regresores <- read.csv(file="PATH\\regressors.csv", header = TRUE, sep = ",")#dim=100*1
cost <- read.csv(file="PATH\\cost.csv", header = TRUE, sep = ",")#dim=1*11

for  (i in seq(0, 1, by = 0.1)){#so as to have a collection of models with          different penalties
  obj.fun <- c(1,1,i*coste)
  constr <- matrix(
    c(y,regresores,-regresores),
    c(-y,-regresores,regresores),
    sum(regresores),ncol = ,byrow = TRUE)
  constr.dir <- c("<=",">=","<=","==")
  rhs<-c(regresores,-regresores,1,binary)
  sol<- lp("min", obj.fun, constr, constr.tr, rhs)
  sol$objval
  sol$solution}

Я знаю, что есть функция LAD в R, но ради согласованности с моими коллегами, а также довольно раздражающим преподавателем PhD, я должен выполнить это, используя lpSolve в R. Я только что начал с R для проект, и я не знаю точно, почему это не будет работать. Что-то не так с синтаксисом или моей формулировкой модели? Правильно знаю, главная проблема у меня есть:

"Ошибка в матрице (c (y, -regressors, -regressors), c (-y, -regressors, regressors),: нечисловой экстент матрицы".

Главным образом, я намеревался создать указанную взвешенную модель LAD и заставить ее возвращать различные значения лямбда от 0 до 1 с шагом 0,1.

Заранее спасибо и извините за неудобства, ни английский, ни R не являются моими родными языками.

...