【问题标题】:Problem in creating a model.matrix of quantitative predictors in R在 R 中创建一个 model.matrix 的定量预测器的问题
【发布时间】:2020-09-15 13:53:50
【问题描述】:

我必须对包 glmnet 进行 Lasso 回归,但我无法生成我的 x model.matrix 我的 data.frame:108 个观察值,Y 响应变量,24 个预测变量,这是一个概述:

  CONVENTIONAL_HUmin CONVENTIONAL_HUmean CONVENTIONAL_HUstd CONVENTIONAL_HUmax
1   37.9400539686119    63.4903779286635   11.7592095845857   85.2375439991287
2   23.8400539686119    80.5903779286635   15.0592095845857   125.837543999129
3   19.3035945249441    73.2764716205565   12.8816244173147    130.24141901586
  CONVENTIONAL_HUQ1 CONVENTIONAL_HUQ2 CONVENTIONAL_HUQ3      HISTO_Skewness   HISTO_Kurtosis
1  54.9938390994964  65.4873070322704  72.8863025473031  -0.203420585259268 2.25208159159488
2  70.8938390994964  80.3873070322704  91.4863025473031  -0.117420585259268 2.91208159159488
3  64.4689755423307  73.8666609177099  81.7351818199415 -0.0908104900456161  2.8751327713366
  HISTO_ExcessKurtosis HISTO_Entropy_log10 HISTO_Entropy_log2 HISTO_Energy...Uniformity.
1   -0.751917020142877   0.701345471328916   2.32782599847774          0.219781577333287
2  -0.0887170201428774   0.793345471328916   2.63782599847774          0.184781577333287
3   -0.127231561113029   0.738530858918985   2.45445652190669          0.206887426065656
          GLZLM_SZE        GLZLM_LZE          GLZLM_LGZE       GLZLM_HGZE          GLZLM_SZLGE
1 0.366581916604228 35.7249100350856 8.7285612359045e-05 11497.6407737833 3.22615226279017e-05
2 0.693581916604228 984.424910035086 8.5685612359045e-05 11697.6407737833 5.98615226279017e-05
3 0.622711792823853 1103.10288991619 8.5573088970709e-05 11571.7421733917 5.33303855950858e-05
       GLZLM_SZHGE         GLZLM_LZLGE      GLZLM_LZHGE       GLZLM_GLNU       GLZLM_ZLNU
1 4164.91570215061 0.00314512237564268 405585.990838764 2.66964898745512 2.47759091065361
2 8064.91570215061  0.0835651223756427 11581585.9908388 12.9796489874551 38.5375909106536
3 7295.45317481887  0.0949686480587339 12926109.9421091 15.0930512668698 37.6083347285291
           GLZLM_ZP Y
1 0.219643444043173 1
2 0.112643444043173 0
3 0.104031438564764 0 

我的model.matrix代码

x=model.matrix(Y~.,data=data.det)

它通常是一个非常大的 model.matrix,包含 244728 个元素!似乎它已经复制了 24 的每个预测器一百次! 以下是 data.matrix 的概述:

(Intercept) CONVENTIONAL_HUmin-10.5599460313881
    CONVENTIONAL_HUmin-117.359946031388 CONVENTIONAL_HUmin-13.0599460313881
    CONVENTIONAL_HUmin-154.359946031388 CONVENTIONAL_HUmin-17.6599460313881
    CONVENTIONAL_HUmin-18.3599460313881 CONVENTIONAL_HUmin-2.87994603138811
    CONVENTIONAL_HUmin-21.281710504529 CONVENTIONAL_HUmin-28.3599460313881
    CONVENTIONAL_HUmin-3.44994603138811 CONVENTIONAL_HUmin-3.89640547505594
    CONVENTIONAL_HUmin-67.0599460313881 CONVENTIONAL_HUmin-682.359946031388
    CONVENTIONAL_HUmin-9.08171050452898 CONVENTIONAL_HUmin1.04428949547101
    CONVENTIONAL_HUmin1.63928949547101 CONVENTIONAL_HUmin10.8400539686119
    CONVENTIONAL_HUmin10.968289495471 CONVENTIONAL_HUmin11.5400539686119
    CONVENTIONAL_HUmin11.618289495471 CONVENTIONAL_HUmin11.6400539686119
    CONVENTIONAL_HUmin12.518289495471 CONVENTIONAL_HUmin12.5400539686119
    CONVENTIONAL_HUmin13.4400539686119 CONVENTIONAL_HUmin13.6400539686119
    CONVENTIONAL_HUmin13.7400539686119 CONVENTIONAL_HUmin13.818289495471
    CONVENTIONAL_HUmin14.5400539686119 CONVENTIONAL_HUmin14.6693017607572
    CONVENTIONAL_HUmin14.8400539686119 CONVENTIONAL_HUmin16.9400539686119
    CONVENTIONAL_HUmin17.0400539686119 CONVENTIONAL_HUmin17.618289495471
    CONVENTIONAL_HUmin18.2400539686119 CONVENTIONAL_HUmin18.8400539686119
    CONVENTIONAL_HUmin19.3035945249441 CONVENTIONAL_HUmin20.0400539686119
    CONVENTIONAL_HUmin20.818289495471 CONVENTIONAL_HUmin21.0400539686119
    CONVENTIONAL_HUmin21.118289495471 CONVENTIONAL_HUmin21.3400539686119
    CONVENTIONAL_HUmin21.5400539686119 CONVENTIONAL_HUmin21.9400539686119
...
attr(,"contrasts")$CONVENTIONAL_HUmin
[1] "contr.treatment"

一点也不方便,因为我最终在 Lasso Regression 的输入 x 中得到了更多的预测变量,这使得预测变量的危险选择更加存在

您知道功能障碍的根源吗?有什么建议可以解决这个问题吗?

【问题讨论】:

  • 你为什么要运行model.matrix?看来您的预测变量是数字而不是因素?
  • @ChuckP,没错,我的所有预测变量都是数字,但我必须先运行 model.matrix,然后再将其作为套索回归 x=model.matrix(Y~.,data=data.det) y=data.detect$Yfit.lasso <- glmnet(x,y,family = "binomial",alpha = 1) 的输入进行集成,如 ISLR p251 所建议的那样。
  • 不!矩阵和model.matrix有很大的区别

标签: r lasso-regression model.matrix


【解决方案1】:

试试这个,你想要一个矩阵而不是模型矩阵...

# make a matrix of your predictors minus your outcome
x <- as.matrix(data.detect[-25])

# put the y column in a vector
y <- data.detect$Y

# run it
fit.lasso <- glmnet(x, y, family = "binomial", alpha = 1)

【讨论】:

  • 它不能作为我的 `glmnet` 中的正确输入,正如您所建议的那样,我只有一个预测变量沿收缩系数 lambda 的多个值进行测试。同样,这不是 Hastie 和 Tibshirani 在 ISLR p251 中建议的:“(...)我们将使用 glmnet 包来执行岭回归和套索。(...)特别是,我们必须传入一个 x 矩阵以及一个 y 向量,我们不使用 y ∼ x 语法。"
  • 您的问题说您有 24 个预测变量,它是哪一个?你不会真的指望我跑出去买这本书吧?我给你的代码正是它使 x 成为矩阵和 y 向量并避免 y ~ x 语法。
  • 这本书是免费的,可供所有数据科学家参考。我建议您在进一步讨论之前先查看矩阵和设计矩阵之间的区别,这是一类矩阵,模型矩阵是其中的一部分。正如我在之前的评论中告诉你的那样,你建议的代码对于我需要运行的函数的输入(套索回归)没有任何作用。无论如何感谢您的帮助!
  • 享受美好的一天
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
  • 2018-02-05
  • 1970-01-01
  • 2018-10-25
  • 2012-03-03
  • 1970-01-01
相关资源
最近更新 更多