2015-03-24 1 views
2

Pourquoi il n'y a aucune possibilité de transmettre seulement 1 variable explicative pour modéliser dans glmnet fonction de glmnet package quand c'est possible dans glm fonction de base? Le code et l'erreur sont ci-dessous:Pourquoi ne peut pas passer seulement 1 coulmn à glmnet quand c'est possible dans la fonction glm dans R?

> modelX<-glm(ifelse(train$cliks <1,0,1)~(sparseYY[,40]), family="binomial") 
> summary(modelX) 

Call: 
glm(formula = ifelse(train$cliks < 1, 0, 1) ~ (sparseYY[, 40]), 
    family = "binomial") 

Deviance Residuals: 
    Min  1Q Median  3Q  Max 
-0.2076 -0.2076 -0.2076 -0.2076 2.8641 

Coefficients: 
       Estimate Std. Error z value Pr(>|z|)  
(Intercept) -3.82627 0.00823 -464.896 <2e-16 *** 
sparseYY[, 40] -0.25844 0.15962 -1.619 0.105  
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

(Dispersion parameter for binomial family taken to be 1) 

    Null deviance: 146326 on 709677 degrees of freedom 
Residual deviance: 146323 on 709676 degrees of freedom 
AIC: 146327 

Number of Fisher Scoring iterations: 6 

> modelY<-glmnet(y =ifelse(train$cliks <1,0,1), x =(sparseYY[,40]), family="binomial" ) 
Błąd wif (is.null(np) | (np[2] <= 1)) stop("x should be a matrix with 2 or more columns") 
+0

Il convient de noter que vous pouvez lier un tout 0 colonne à une variable de colonne x et glmnet céderas le coefficient 1er approprié et un coefficient de zéro pour la colonne tous les 0. '' 'x = cbind (sparseYY [, 40], 0)' '' – Wart

+1

Le paquet 'glmnet' implémente des méthodes de régularisation. Quel serait le but d'appliquer LASSO ou rigde pour adapter un modèle avec une seule variable explicative? Pourquoi voudriez-vous réduire votre coefficient un (crête) ou le mettre égal à zéro (LASSO)? Ces méthodes commencent seulement à avoir un sens à 'k> = 2'. –

+0

@AlvaroFuentes juste assez. Mon esprit a dû être limité ce jour-là .. –

Répondre

-1

Parce que la documentation le dit.

Pour la famille = « binomiale » devrait être un facteur à deux niveaux, ou une matrice à deux colonnes de comptages ou proportions (la deuxième colonne est traitée comme la classe cible, pour un facteur, le dernier niveau dans l'ordre alphabétique est la classe cible).

Vous avez deux options. Construisez une matrice où deux colonnes représentent des comptes, ou convertissez x en un facteur à deux niveaux.

+0

Ne fonctionne toujours pas > modelY <-glmnet (y = as.factor (ifelse (commande $ cliks <1,0,1)), x = as.factor (sparseYY [, 40]), + family = "binomial") Błąd wif (is.null (np) | (np [2] <= 1)) stop ("x doit être une matrice avec 2 colonnes ou plus") : –

+0

@MarcinKosinski sans un exemple reproductible, je crains que je ne peux pas aider plus loin. Peut-être pourriez-vous essayer de construire un ensemble de données complet avant de le transmettre à glmnet? –

1

Je ne sais pas pourquoi, mais c'est une sorte de limitation interne. Cela n'a rien à voir avec la famille comme Roman l'a dit plus haut.

glmnet(x = as.matrix(iris[2:4]), y = as.matrix(iris[1])) 
## long output 
glmnet(x = as.matrix(iris[1]), y = as.matrix(iris[1])) 
Error in glmnet(x = as.matrix(iris[2]), y = as.matrix(iris[1])) : 
    x should be a matrix with 2 or more columns 

Il est une simple vérification dans le code https://github.com/cran/glmnet/blob/master/R/glmnet.R#L20