2

以下はサンプルデータです。

# generation of correlated data   
matrixCR <- matrix(NA, nrow = 100, ncol = 100)
diag(matrixCR) <- 1
matrixCR[upper.tri (matrixCR, diag = FALSE)] <- 0.5
matrixCR[lower.tri (matrixCR, diag = FALSE)] <- 0.5
matrixCR[1:10,1:10]
L = chol(matrixCR)# Cholesky decomposition
nvars = dim(L)[1]
nobs = 200
set.seed(123)
rM = t(L) %*% matrix(rnorm(nvars*nobs), nrow=nvars, ncol=nobs)
rM1 <- t(rM)
rownames(rM1) <- paste("S", 1:200, sep = "") 
colnames(rM1) <- paste("M", 1:100, sep = "")
# introducing missing value to the dataset 
N <- 2000*0.05 # 5% random missing values 
inds <- round ( runif(N, 1, length(rM1)) )
rM1[inds] <- NA


# using random forest implemented in mice package 
require(mice)
out.imp <- mice(rM1, m = 5, method ="rf")
imp.data <- complete(out.imp)

次のエラーが表示されます:

 iter imp variable
  1   1  M1  M2Error in apply(forest, MARGIN = 1, FUN = function(s) sample(unlist(s),  : 
  dim(X) must have a positive length

この問題の原因がわかりません。

4

1 に答える 1

1

私のコメントで述べたように、methodが randomforest ( rf) に設定されている場合、mice関数は値が 1 つしかない列に到達するたびにエラーをスローしますが、NAそれ以外の値の数では問題なく動作しNAます。

パッケージの作成者に確認したところ、これはバグのようです。修正されるまでは、単一の値を持つ列に対して別の代入方法を選択できますNA。例えば:

# Count number of NA in each column
NAcount = apply(rM1, 2, function(x) sum(is.na(x)))

# Create a vector giving the imputation method to use for each column. 
# Set it to "rf" unless that column has exactly one NA value.
method = rep("rf", ncol(rM1))
method[which(NAcount==1)] = "norm"

# Run the imputation with the new "method" selections
out.imp <- mice(rM1, m = 5, method = method)

一貫性を保つために、すべての列に同じ代入法を使用することをお勧めしますが、ランダムフォレスト法を使用するように設定されている場合は、上記の方法でオプションが提供されます。

于 2014-06-03T15:54:45.353 に答える