Ошибка пакета мыши: cor (xobs [, keep, drop = FALSE], use = "all.obs"): "x" пусто - PullRequest
0 голосов
/ 04 апреля 2019

Я занимаюсь моделированием, и один из наборов данных, который я вменяю, очень маленький (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, команда mouse работала нормально, без ошибок.

Я посмотрел вверхошибка и наткнулся на эти две ссылки, которые не помогли: 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подразумевающие, что предикторы отбрасываются.

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

1 Ответ

0 голосов
/ 04 апреля 2019

В файле справки, поставляемом с мышами, указано следующее о параметре "преломительМатрицы"

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

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

# 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

...