2017-07-10 7 views
0

J'essaie de lancer un modèle LM simple. J'utilise les éléments suivantsLa fonction lm donne une estimation de la variable y également

dt <- data.table(
    y=rnorm(100,0,1), 
    x1=rnorm(100,0,1), 
    x2=rnorm(100,0,1), 
    x3=rnorm(100,0,1)) 

y_var2 <- names(dt)[names(dt)%like%"y"] 
x_var2 <- names(dt)[names(dt)%like%"x"] 

tmp2 <- summary(a <- lm(get(y_var2)~.,dt[,c(x_var2,y_var2),with=F])) 
coefs2 <- as.data.table(tmp2$coefficients,keep.rownames = T) 

Donc à la fin, coefs2 doit contenir les estimations, les valeurs p etc. Mais dans la dernière ligne de la coefs2 je vois aussi la variable y.

Mais si j'utilise

tmp2 <- summary(a <- lm(y~.,dt[,c(x_var2,y_var2),with=F])) 

Alors cela ne se produit pas. Pourquoi donc ?

Répondre

2

Cela a à voir avec la façon dont R stocke les variables. y_var2 est un caractère "y" et vous le remplissez dans la formule en tant que variable de caractère que vous souhaitez modéliser avec toutes les variables de votre data.table dt. Cependant, vous devez dire à R que vous souhaitez évaluer la formule y ~. et non "y" ~. qui sont deux expressions différentes pour R.

lm(formula(paste(y_var2,"~.")),dt[,c(x_var2,y_var2),with=F]) 

fera l'affaire. formule construit une formule à partir de la variable chaîne avec laquelle a construit l'expression.

2

En fait, il serait probablement plus propre juste pour la formule avec reformulate() et le paramètre data= de lm

tmp2 <- summary(a <- lm(reformulate(x_var2, y_var2), dt))