私は R に比較的慣れておらず、フォーラムもまったく初めてなので、いくつかの投稿ルールを認識していない可能性があります (親切に)。
私が抱えている問題は、Stef van Buuren によるマウス パッケージの as.mids() 関数に関連しています。それを使用すると、新しい mids オブジェクトのデータは問題ありませんが、属性の補完の数は元の + 1 です。
例 (元の as.mids() の例と mouse パッケージのデータを使用):
imp <- mice(boys, print = FALSE, maxit = 1) #using the default number of imputations m = 5
X <- complete(imp, action = "long", include = TRUE)
test <- as.mids(X)
作成されたオブジェクトは次のようになります: 代入数 = 6 (5 ではなく)。
fit <- with(imp, lm(bmi ~ age))
round(summary(pool(fit)), 2)
fit2 <- with(test, lm(bmi ~ age))
round(summary(pool(fit2)), 2).
as.mids() のコードを見ると、1 つの小さな変更でこれが解決されているように見えますが、私の R の知識にはセカンドオピニオンが必要です。
元の as.mids() コードは次のとおりです。
function (data, .imp = 1, .id = 2)
{
ini <- mice(data[data[, .imp] == 0, -c(.imp, .id)], m = max(as.numeric(data[,
.imp])), maxit = 0)
names <- names(ini$imp)
if (!is.null(.id)) {
rownames(ini$data) <- data[data[, .imp] == 0, .id]
}
for (i in 1:length(names)) {
for (m in 1:(max(as.numeric(data[, .imp])) - 1)) {
if (!is.null(ini$imp[[i]])) {
indic <- data[, .imp] == m & is.na(data[data[,
.imp] == 0, names[i]])
ini$imp[[names[i]]][m] <- data[indic, names[i]]
}
}
}
return(ini)
}
ini (3 行) の定義でマウスの呼び出しの m パラメータを変更すると、問題が解決するようです (max(as.numeric()) がレベルの数を与えるという事実のみを考慮して、元のデータを含め、これはおそらく言及されていません):
as.mids.mod <- function(data, .imp = 1, .id = 2){
ini <- mice(data[data[, .imp] == 0, -c(.imp, .id)], m = (max(as.numeric(data[, .imp])) -1), maxit = 0)
names <- names(ini$imp)
if (!is.null(.id)) {
rownames(ini$data) <- data[data[, .imp] == 0, .id]
}
for (i in 1:length(names)) {
for (m in 1:(max(as.numeric(data[, .imp])) - 1)) {
if (!is.null(ini$imp[[i]])) {
indic <- data[, .imp] == m & is.na(data[data[, .imp] == 0, names[i]])
ini$imp[[names[i]]][m] <- data[indic, names[i]]
}
}
}
return(ini)
例で as.mids.mod を使用すると、同様の分析結果が得られます。
imp <- mice(boys, print = FALSE, maxit = 1)
data <- complete(imp, action = "long", include = TRUE)
test <- as.mids(data)
test2 <- as.mids.mod(data)
fit <- with(imp, lm(bmi ~ age))
round(summary(pool(fit)), 2)
fit3 <- with(test2, lm(bmi ~ age))
round(summary(pool(fit3)), 2)
関数の使用や問題解決に何か問題がありますか、それとも as.mids() 関数をわずかに変更する必要がありますか?