我遇到了一个问题,关于最小化绝对误差,这个问题被称为 LAD(最小绝对偏差),但是,由于每个回归量都是昂贵测试的结果和相关成本,所以应该避免使用不使用的回归量t 高度解释方差。它采用以下等式:
其中 N 是观察的总数,E 是与观察 i 相关的偏差,S 是独立变量的数量,lambda 是成本的惩罚系数,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 函数,但是为了与我的同事以及一个非常烦人的博士导师保持一致,我必须lpSolve
在 R 中执行此操作。我刚刚开始使用 R 进行该项目,但我没有确切地知道为什么这不会运行。语法或我的模型表述是否有问题。知道,我的主要问题是:
“矩阵中的错误(c(y,回归量,-回归量),c(-y,-回归量,回归量),:非数字矩阵范围”。
主要是,我打算让它创建所述加权 LAD 模型并让它返回不同的 lambda 值,从 0 到 1,步长为 0.1。
在此先感谢您对任何不便深表歉意,英语和 R 都不是我的母语。