ошибка пакета мыши: cor(xobs[, keep, drop = FALSE], use = all.obs): 'x' пуст

Я занимаюсь моделированием, и один из наборов данных, которые я вменяю, очень мал (n = 10). При использовании MICE мой набор данных и код выглядят следующим образом

> dat
            y         X1        X2
11 -155.04185         NA 10.464688
12   69.02116         NA  8.245312
13  -89.18124   21.69072  4.717425
14  115.52205         NA 15.666802
15   94.09654         NA  6.977855
16   65.44607         NA 16.608755
17 -246.09192         NA  3.208590
18  118.99815   25.68459  4.727989
19  214.84858         NA  6.065670
20  293.19425         NA  6.647658


> pred1 <-matrix(data= c(0,0,0,
                         1,0,1, 
                         0,0,0), nrow = 3, ncol = 3, byrow = TRUE)

> mice(dat, m=25, method= "norm", predictorMatrix = pred1, maxit=5)
    iter imp variable
  1   1  X1_missing
Error in cor(xobs[, keep, drop = FALSE], use = "all.obs") : 'x' is empty

Для другого набора данных, который имеет 3 наблюдаемых значения для X1, команда мыши работала нормально, без ошибок.

Я просмотрел ошибку и наткнулся на эти две ссылки, которые не помогли: https://stat.ethz.ch/pipermail/r-help/2015-December/434914.html

Неясная ошибка с пакетом мышей

Я просмотрел следующий код в github https://github.com/stefvanbuuren/mice/blob/master/R/internal.R

Я определил, что «x» — это матрица плана, которая используется для вменения переменной с отсутствующими наблюдениями. (нашел определения по этой ссылке: https://stat.ethz.ch/pipermail/r-help/2015-December/434914.html)

В моем случае матрица проекта должна состоять из «y» и «X2», которые я указал в pred1, чтобы помочь вычислить «X1». Учитывая, что «y» и «X2» полностью наблюдаются в данных, я не уверен, почему он считает, что матрица дизайна пуста.

У кого-нибудь есть идеи относительно того, что происходит не так?

ОБНОВЛЕНИЕ: после обновления пакета mice до версии 3.4.0 выполнялись импутации для папки данных, но регистрировался ряд событий и выводилось следующее сообщение об ошибке.

it im        dep meth                                                     out
1  1  1 X1_missing norm         df set to 1. # observed cases: 2  # predictors: 3
2  1  1 X1_missing norm All predictors are constant or have too high correlation.
3  1  2 X1_missing norm         df set to 1. # observed cases: 2  # predictors: 3
4  1  2 X1_missing norm All predictors are constant or have too high correlation.
5  1  3 X1_missing norm         df set to 1. # observed cases: 2  # predictors: 3
6  1  3 X1_missing norm All predictors are constant or have too high correlation.

Таким образом, проблема связана с небольшим количеством наблюдений и количеством предикторов, которые я использую, что приводит к отрицательным степеням свободы. По следующей ссылке (https://stefvanbuuren.name/fimd/sec-toomany.html#finding-problems-loggedevents) указывает, что степени свободы устанавливаются равными 1, что означает, что предикторы отбрасываются.

Поэтому мне может потребоваться настроить мои смоделированные данные, чтобы обойти это.


person user110577    schedule 04.04.2019    source источник


Ответы (1)


В файле справки, предоставленном с мышами, говорится следующее о параметре «predictorMatrix».

predictorMatrix: числовая матрица из длин (блоков) строк и ncol(данных) столбцов, содержащая данные 0/1, определяющие набор предикторов для использоваться для каждого целевого столбца.

Есть 2 проблемы с вашей матрицей предикторов. Одна проблема заключается в том, что имена столбцов должны соответствовать именам столбцов с именами столбцов ваших данных в dat. Это можно исправить с помощью colnames:

# This may or may not be the correct order or naming the columnds
colnames(pred1) = c("y", "X1", "X2")

Другая проблема заключается в том, что количество строк матрицы предикторов должно быть таким же, как количество строк вашего объекта данных (количество столбцов также должно быть равным). В этом случае dat имеет 25 строк, поэтому ваша матрица предикторов также будет иметь 25 строк.

Вот пример матрицы предикторов, которая будет работать для ваших данных. Этот пример предназначен только для иллюстративных целей, и, скорее всего, это не та матрица предикторов, которая вам нужна:

# predictor matrix should have same dimensions as object with data.
# create an example predictor matrix of all 1's that has the correct dimensions
pred.example <- matrix(1, ncol=3, nrow=nrow(dat))

# rename columns of example predictor matrix
colnames(pred.example) = c("y", "X1", "X2")

# Run mice
mice(dat, m=25, method= "norm", pred.example = pred1, maxit=5)

# Partial output
iter imp variable
  1   1
  1   2
  1   3
  1   4
  1   5
  ...
  5   23
  5   24
  5   25
Class: mids
Number of multiple imputations:  25 
Imputation methods:
V1  y X1 X2 
"" "" "" "" 
PredictorMatrix:
   V1 y X1 X2
V1  0 1  0  1
y   1 0  0  1
X1  0 0  0  0
X2  1 1  0  0
Number of logged events:  1 
  it im dep      meth out
1  0  0     collinear  X1

person NM_    schedule 04.04.2019
comment
Привет, спасибо за ваш ответ. Я не уверен, что согласен с вашим утверждением, что матрица предикторов также будет иметь 25 строк. В файле справки для мышей указано, что PredictorMatrix представляет собой квадратную матрицу размера ncol(data). Каждая строка является целевой переменной, а переменная столбца берется в качестве предиктора на основе значения элемента 0 или 1. В случае квадратной матрицы количество строк и столбцов матрицы предиктора должно быть равным, а не (25 x 3), как вы предложили. Я не думаю, что матрица предикторов является проблемой, поскольку она отлично работает для других смоделированных наборов данных, таких как dat выше. - person user110577; 04.04.2019
comment
@user110577 user110577, я опубликовал первые несколько предложений о параметре predictorMatrix в том виде, в каком он дословно указан в файле справки. Об этом сообщили создатели пакета. Если вы наберете ?mice в консоли R, вы сможете проверить. Извините, но я не уверен, как объяснить несоответствие. - person NM_; 04.04.2019