对分位数回归的系数应用 positive/negative 约束
Applying a positive/negative constraint to the coefficients of a quantile regression
在包 quantreg
中,可以执行惩罚分位数回归。选择被认为具有统计意义的变量是 "easy"。然而,当我考虑对系数应用限制时:即一些严格 positive/negative (否则它们将为零),我只是不知道它是如何完成的!到目前为止我的代码是这样的:
quant<-c(0.4,0.5,0.6)
for (t in 400:600){ #the first 400 rows are the trainset, the remaining the test set. In each iteration
x=X[1:399,] #we increase the trainset by 1row and use it to predict for the next.
y=Y[1:399]
for (i in 1:quant) {
eq=rqss(y~x,method="lasso",tau=quant[i],lambda=lambdas) #find the significant variable though a Lasso quantile.
s=summary(eq)
findsigPV=s$coef[2:28,4] #select the stat. significant coefficient/variable
selectedPV=findsigPV<=0.05
if (sum(selectedPV)==0){
SelectedPV=rank(findsigPV)==1
}
newx=as.matrix(subset(X[1:t,],select=which(selectedPV))) #new matrix with the selected variable
eq=rq(y~newx[1:(t-1),],tau=quant[i]) #applies the new q. regression with the selected coeff from the lasso
pr[t-400+1,i]=c(1,newx[t,])%*%eq$coef #saves the forecast
}
}
我担心这个问题很明显。我考虑过使用 ifelse(eq$coef<0,0,eq$coef)
但考虑到一些变量被限制为正或负,这不是理想的解决方案。有什么想法吗?
编辑:我忘记包括的是,每次迭代都选择了一个(可能)与前一次迭代不同的变量!
正在添加
j=2
for (k in 1:23){
if (II[k]){
if (k <=12){ #positive constraint to the first 12 variables lets say
if (eq$coeff[j] <0){
eq$coeff[j] =0}
j=j+1}
if (k > 12){ #negative constraint to the remaining ones
if (eq$coeff[j] >0){
eq$coeff[j] =0}
j=j+1}
}
}
print(eq$coeff)
就在做出预测之前,解决了问题。
在包 quantreg
中,可以执行惩罚分位数回归。选择被认为具有统计意义的变量是 "easy"。然而,当我考虑对系数应用限制时:即一些严格 positive/negative (否则它们将为零),我只是不知道它是如何完成的!到目前为止我的代码是这样的:
quant<-c(0.4,0.5,0.6)
for (t in 400:600){ #the first 400 rows are the trainset, the remaining the test set. In each iteration
x=X[1:399,] #we increase the trainset by 1row and use it to predict for the next.
y=Y[1:399]
for (i in 1:quant) {
eq=rqss(y~x,method="lasso",tau=quant[i],lambda=lambdas) #find the significant variable though a Lasso quantile.
s=summary(eq)
findsigPV=s$coef[2:28,4] #select the stat. significant coefficient/variable
selectedPV=findsigPV<=0.05
if (sum(selectedPV)==0){
SelectedPV=rank(findsigPV)==1
}
newx=as.matrix(subset(X[1:t,],select=which(selectedPV))) #new matrix with the selected variable
eq=rq(y~newx[1:(t-1),],tau=quant[i]) #applies the new q. regression with the selected coeff from the lasso
pr[t-400+1,i]=c(1,newx[t,])%*%eq$coef #saves the forecast
}
}
我担心这个问题很明显。我考虑过使用 ifelse(eq$coef<0,0,eq$coef)
但考虑到一些变量被限制为正或负,这不是理想的解决方案。有什么想法吗?
编辑:我忘记包括的是,每次迭代都选择了一个(可能)与前一次迭代不同的变量!
正在添加
j=2
for (k in 1:23){
if (II[k]){
if (k <=12){ #positive constraint to the first 12 variables lets say
if (eq$coeff[j] <0){
eq$coeff[j] =0}
j=j+1}
if (k > 12){ #negative constraint to the remaining ones
if (eq$coeff[j] >0){
eq$coeff[j] =0}
j=j+1}
}
}
print(eq$coeff)
就在做出预测之前,解决了问题。