2017-07-10 19 views
0

私は単純なlmモデルを実行しようとしています。私は最後に、coefs2は推計、p値などが含まれている必要があります。しかしcoefs2の最後の行で、私はまた、Y変数を参照してください。次のlm関数もy変数の推定値を返します

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) 

を使用しています。

しかし、私は

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

を使用する場合、これは起こりません。何故ですか ?

答えて

2

これは、Rが変数をどのように格納するかと関係があります。 y_var2は文字「y」であり、data.table dtのすべての変数を使用してモデル化する文字変数として数式に入力します。しかし、式yを評価したいとRに指示する必要があります。 "y"〜ではない。 Rの2つの異なる式です。

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

トリックを行います。式は、式を構成する文字列変数から式を構成します。

2

実はおそらくちょうどreformulate()lm

tmp2 <- summary(a <- lm(reformulate(x_var2, y_var2), dt)) 
data=パラメータで式を作るためにきれいになります
関連する問題