2017-01-26 1 views
0

Wir versuchen, die Lasso-Schätzung mithilfe von Glmnet zu berechnen. Anstatt cv.glmnet zu verwenden, wollen wir das Lambda auf 0.34 setzen und dann die Koeffizienten berechnen. Wenn wir jedoch später den Wert von Lambda R überprüfen, ergibt sich Lambda = NULL. Irgendein Hinweis, wie man das Lambda repariert?R - So wählen Sie ein Fix-Lambda im Glnment-Paket

# sample the data 
q <- rnorm(n*p, mean=0, sd=1) #create the matrix values from N(0,1) 
x <- matrix(q, nrow=n, ncol=p) 
e <- rnorm(n, mean=0, sd=1) # create error array 
y <- x%*%beta1 + e # get the y values 

#compute the coefficients LASSO 
lasso <- glmnet(x,y) 
lambda <- lasso$lambda.1se # selected lambda by cross-validation 
beta.hat <- as.matrix(coef(lasso, s=0.34)) #get the estimate beta's 
beta.hat <- beta.hat[2:(p+1),1] # delete intercept 

Antwort

0

Sie sollten verwenden: lasso <- glmnet::cv.glmnet(x,y).

Hier ist Ihr in Ihrem Code geändert (I angegebenen Wert für n,p,beta1):

# sample the data 
require(glmnet) 
set.seed(1) 
n = 100; p =10 
q <- rnorm(n*p, mean=0, sd=1) #create the matrix values from N(0,1) 
x <- matrix(q, nrow=n, ncol=p) 
e <- rnorm(n, mean=0, sd=1) # create error array 
beta1 <- runif(10) 
y <- x%*%beta1 + e # get the y values 

#compute the coefficients LASSO 
lasso <- cv.glmnet(x,y) 
lambda <- lasso$lambda.1se # selected lambda by cross-validation 
print(lambda) 
beta.hat <- as.matrix(coef(lasso, s=0.34)) #get the estimate beta's 
beta.hat <- beta.hat[2:(p+1),1] # delete intercept 

lambda ist NULL sinceyou verwendet glmnet::glmnet statt glmnet::cv.glmnet. Es gibt keine Objekte lambda.1se vom Ausgang des glmnet wie Sie, wenn Sie str(lasso, 1) geben Sie sehen:

> str(lasso, 1) 
List of 12 
$ a0  : Named num [1:64] -0.0804 -0.0762 -0.0725 -0.0691 -0.066 ... 
    ..- attr(*, "names")= chr [1:64] "s0" "s1" "s2" "s3" ... 
$ beta  :Formal class 'dgCMatrix' [package "Matrix"] with 6 slots 
$ df  : int [1:64] 0 1 1 1 1 1 2 3 3 3 ... 
$ dim  : int [1:2] 10 64 
$ lambda : num [1:64] 1.373 1.251 1.14 1.039 0.946 ... 
$ dev.ratio: num [1:64] 0 0.0678 0.1241 0.1709 0.2097 ... 
$ nulldev : num 472 
$ npasses : int 271 
$ jerr  : int 0 
$ offset : logi FALSE 
$ call  : language glmnet(x = x, y = y) 
$ nobs  : int 100 
- attr(*, "class")= chr [1:2] "elnet" "glmnet" 
Verwandte Themen