R中rqPen和quantreg包之间的区别

时间:2018-02-07 10:07:18

标签: r packages lasso quantile-regression

我正在为R中的波士顿住房数据构建分位数回归模型+ LASSO惩罚。我找到了2个可以构建这种模型的软件包:rqPen和quantreg。 rqPen实现了一个交叉验证过程来调整LASSO参数lambda,所以我决定使用这个。我考虑了算法自动选择的100个不同的lambda值和10倍:

In [56]: df2[df2.m_name.isin(df1.name) | df2.n_name.isin(df1.name)]
Out[56]:
  m_name n_name  loc
0    abc    tyu  IND
1    bcd    abc  RSA
3    lmn    ert  AUS
5    pqr    lmn   NZ

CV的结果是,λ值为0.46时,最小绝对误差为4.2。该模型仅考虑预测因子" zn," tax"," b"和" lstat"并将与其他预测变量相关的系数发送到零。

In [58]: df2.query('m_name in @df1.name or  n_name in @df1.name')
Out[58]:
  m_name n_name  loc
0    abc    tyu  IND
1    bcd    abc  RSA
3    lmn    ert  AUS
5    pqr    lmn   NZ

我决定使用另一个包(quantreg包)构建相同的模型,但保持lambda值。我预计模型形成的两个包不完全相同,但在模型中包含的预测变量方面相似。

library(rqPen)
library(mlbench)
data("BostonHousing")
help(BostonHousing)
x_boston <- data.matrix(BostonHousing[,-14])
y_boston <- BostonHousing[,14]
cv_m1_boston <- cv.rq.pen(x_boston,y_boston, penalty="LASSO", nlambda=100, nfolds=10, tau=.5, cvFunc="AE")

我发现在这个模型中所有的预测器都被使用了,所以它与第一个完全不同。

m1_boston <- rq.lasso.fit(x_boston[i_train,], y_boston[i_train], tau=0.5, lambda=0.46)

Coefficients:
intercept         crim           zn        indus         chas          nox           rm          age          dis          rad 
27.175724364  0.000000000  0.025560221  0.000000000  0.000000000  0.000000000  0.000000000  0.000000000  0.000000000  0.000000000 
        tax      ptratio            b        lstat 
-0.008151729  0.000000000  0.007577458 -0.495927958 

我做错了吗?是计算失败的rqPen包吗?

0 个答案:

没有答案