6 votes

Le code Lasso r - qu'est-ce qui ne va pas avec lui ?

J'essaie d'effectuer une régression lasso en utilisant le paquet lars mais je n'arrive pas à faire fonctionner le bit lars. J'ai entré le code :

diabetes<-read.table("diabetes.txt", header=TRUE)
diabetes
library(lars)
diabetes.lasso = lars(diabetes$x, diabetes$y, type = "lasso")

Cependant, je reçois le message d'erreur suivant : Error in rep(1, n) : invalid 'times' argument.

J'ai essayé de l'entrer comme ceci :

diabetes<-read.table("diabetes.txt", header=TRUE)
library(lars)
data(diabetes)
diabetes.lasso = lars(age+sex+bmi+map+td+ldl+hdl+tch+ltg+glu, y, type = "lasso")

Mais ensuite, je reçois le message d'erreur : Error in lars(age+sex + bmi + map + td + ldl + hdl + tch + ltg + glu, y, type = "lasso") : object 'age' not found'.

Où est-ce que je me trompe ?

EDIT : Données - comme ci-dessous mais avec 5 colonnes supplémentaires.

             ldl          hdl          tch          ltg          glu
1   -0.034820763 -0.043400846 -0.002592262  0.019908421 -0.017646125
2   -0.019163340  0.074411564 -0.039493383 -0.068329744 -0.092204050
3   -0.034194466 -0.032355932 -0.002592262  0.002863771 -0.025930339
4    0.024990593 -0.036037570  0.034308859  0.022692023 -0.009361911
5    0.015596140  0.008142084 -0.002592262 -0.031991445 -0.046640874

4voto

BondedDust Points 105234

lars::lars ne semble pas avoir d'interface de formule, ce qui signifie que vous ne pouvez pas utiliser la spécification de formule pour les noms de colonne (et de plus, il n'accepte pas d'argument "data="). Pour plus d'informations sur ce sujet et d'autres sujets liés à l'exploration de données, vous pouvez vous procurer un exemplaire du texte classique : "Elements of Statistical Learning". Essayez ceci :

# this obviously assumes require(lars) and data(diabetes) have been executed.
> diabetes.lasso = with( diabetes, lars(x, y, type = "lasso"))
> summary(diabetes.lasso)
LARS/LASSO
Call: lars(x = x, y = y, type = "lasso")
   Df     Rss       Cp
0   1 2621009 453.7263
1   2 2510465 418.0322
2   3 1700369 143.8012
3   4 1527165  86.7411
4   5 1365734  33.6957
5   6 1324118  21.5052
6   7 1308932  18.3270
7   8 1275355   8.8775
8   9 1270233   9.1311
9  10 1269390  10.8435
10 11 1264977  11.3390
11 10 1264765   9.2668
12 11 1263983  11.0000

4voto

Ben Bolker Points 50041

Je pense qu'une partie de la confusion peut avoir à faire avec le fait que les diabetes qui est fourni avec le lars Le paquet a une structure inhabituelle.

library(lars)
data(diabetes)
sapply(diabetes,class)
##        x         y        x2 
##   "AsIs" "numeric"    "AsIs" 

sapply(diabetes,dim)
## $x
## [1] 442  10
## 
## $y
## NULL
## 
## $x2
## [1] 442  64

En d'autres termes, diabetes est un cadre de données contenant des "colonnes". qui sont elles-mêmes des matrices . Dans ce cas, with(diabetes,lars(x,y,type="lasso")) o lars(diabetes$x,diabetes$y,type="lasso") fonctionnent bien. (Mais juste lars(x,y,type="lasso") ne le fera pas, parce que R ne sait pas qu'il faut chercher la x y y dans le cadre de la diabetes cadre de données).

Cependant, si vous lisez vos propres données, vous devrez séparer vous-même la variable de réponse et la matrice du prédicteur, comme suit

X <- as.matrix(mydiabetes[names(mydiabetes)!="y",])
mydiabetes.lasso = lars(X, mydiabetes$y, type = "lasso")

Ou vous pouvez utiliser

X <- model.matrix(y~.,data=mydiabetes)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X