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