混合整数编程R:具有与每个回归器相关的成本的最小绝对偏差

时间:2018-11-09 12:34:17

标签: r regression mixed-integer-programming

我遇到了一个关于最小化绝对误差的问题,这个问题被称为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

我正在处理的玩具子集具有以下结构: 对于y

 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}

我知道R中有一个LAD函数,但是为了与我的同事保持一致,以及一个令人讨厌的phD导师,我必须在R中使用lpSolve来执行此操作。我刚刚从R开始该项目,我不知道为什么它不会运行。我的模型语法或我的表述有问题吗?知道吧,我的主要问题是:

  

“矩阵错误(c(y,回归,-regressors),c(-y,-回归,回归),:非数值矩阵范围”。

主要是,我打算让它创建加权的LAD模型,并使其以0.1的步长返回从0到1的不同的lambda值。

预先感谢您,给您带来的不便,英语和R都不是我的母语。

0 个答案:

没有答案