2017-10-22 11 views
3

パッケージquantregでは、ペナルティ化された分位回帰を実行できます。統計的に有意であるとみなされた変数を選択することは "容易"である。しかし、係数に拘束を適用することを検討したとき、すなわち厳密には正/負である(そうでなければゼロになる)と考えられたとき、それはどのように行われたのか分かりませんでした!私が今までに持っているコードは、次のとおりです。分位回帰の係数に正/負の制約を適用する

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)を使用すると考えていましたが、理想的な解決策ではないいくつかの変数が正または負のいずれかに制限されていることを考えてください。何か案は?

EDIT:忘れてしまったことは、各反復で以前の反復とは異なる変数が選択されていることです。

答えて

1

予測が行われる直前に

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) 

を追加し、問題を解決します。

関連する問題