我遇到了一个关于最小化绝对误差的问题,这个问题被称为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
我正在处理的玩具子集具有以下结构: 对于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都不是我的母语。