2016-07-30 3 views
0

Rでmiceパッケージを使用して、欠落しているデータを多重に代入しています。関数の内部でwith(df, glm(y ~ x))構造に渡される数式を指定できるようにする必要があります。このwith()構成は、miceパッケージが帰属モデルの内に別々に回帰モデルを適合させるために使用する形式である。の帰属データセット。R - 関数内のwith(df、glm(y〜x))構造に式を渡す方法

しかし、スコープの問題がわかっていないため、数式を引数として渡すことができませんでした。ここでは再現性の例である:それは答えを受信しませんが

library(mice) 

data(mtcars) 
mtcars[5, 5] <- NA # introduce a missing value to be imputed 

mtcars.imp = mice(mtcars, m = 5) 

# works correctly outside of function 
with(mtcars.imp, glm(mpg ~ cyl)) 

fit_model_mi = function(formula) { 
    with(mtcars.imp, glm(formula)) 
} 

# doesn't work when trying to pass formula into function 
fit_model_mi("mpg ~ cyl") 

はまた、Rのヘルプに頼まれて、同じ質問に対してhereを参照してください。

+0

'' mpg〜cyl ''は数式オブジェクトではありません。単なる文字の値さらに、 'with'関数はコンソールレベルでの使用が安全です。機能の中での使用は特に反対されています。 –

答えて

2

as.formulaに式をラップ試してみてくださいすることは

fit_model_mi = function(formula) { 
    with(mtcars.imp, glm(as.formula(formula))) 
} 

に動作するようです:あなたは

attach(mtcars) 

結果によってもattachあなたのデータは示さでき

> fit_model_mi("mpg ~ cyl") 
call : 
with.mids(data = mtcars.imp, expr = glm(as.formula(formula))) 

call1 : 
mice(data = mtcars, m = 5) 

nmis : 
mpg cyl disp hp drat wt qsec vs am gear carb 
    0 0 0 0 1 0 0 0 0 0 0 

analyses : 
[[1]] 

Call: glm(formula = as.formula(formula)) 

Coefficients: 
(Intercept)   cyl 
    37.885  -2.876 

Degrees of Freedom: 31 Total (i.e. Null); 30 Residual 
Null Deviance:  1126 
Residual Deviance: 308.3 AIC: 169.3 
+0

これはうまくいきました、ありがとうございます。 – user5280725

0

fit_model_mi("mpg ~ cyl") 
call : 
with.mids(data = mtcars.imp, expr = glm(formula)) 

call1 : 
mice(data = mtcars, m = 5) 

nmis : 
mpg cyl disp hp drat wt qsec vs am gear carb 
    0 0 0 0 1 0 0 0 0 0 0 

analyses : 
[[1]] 

Call: glm(formula = formula) 

Coefficients: 
(Intercept)   cyl 
    37.885  -2.876 

Degrees of Freedom: 31 Total (i.e. Null); 30 Residual 
Null Deviance:  1126 
Residual Deviance: 308.3 AIC: 169.3 
関連する問題