mice.повторное использование() вопрос: Ошибка в doTryCatch(возврат(expr), имя, родительское имя, обработчик): Отсутствует слева после вменения

#r #imputation #r-mice

Вопрос:

Я пытаюсь вменить данные в свой набор проверки, который следует модели вменения МЫШЕЙ из моего набора поездов с использованием mice.reuse(). Вменение следует за разделением данных, поскольку они будут использоваться для обучения/проверки алгоритмов ML. Данные (n=720) состоят из клинических и лабораторных данных измерений (числовых или факторных).

Смотрите ниже шаги:

 # first split data 

sample_size <- floor(0.75 * nrow(data))
train_data <- sample(seq_len(nrow(data)), size = sample_size)

train <- data[train_data, ]
val <- data[-train_data, ]

# mice imputation - train set
train_imp <- mice(train, 
                  predictorMatrix = predM,
                  method = 'pmm',
                  m = 5, maxit = 10, print = FALSE, 
                  seed = 500)

# apply train data imp model to val data
val_imp <- mice.reuse(train_imp, val, maxit = 1)
 

После этого шага я получаю следующее сообщение об ошибке:

 Error in value[[3L]](cond) : 
  Error in doTryCatch(return(expr), name, parentenv, handler): Missing left after imputation
In addition: There were 50 or more warnings (use warnings() to see the first 50)
 

Данные выглядят примерно так:

 structure(list(male = structure(c(2L, 1L, 2L, 1L, 1L), .Label = c("FALSE", 
"TRUE"), class = "factor"), age = c(55.7864476386037, 55.895961670089, 
41.0376454483231, 29.6563997262149, 57.2183436002738), bmi = c(36.6115389471026, 
31.5536591487683, 22.7903289734443, 42.5307689412473, 33.6484537734337
), waist_circum = c(126, 103, 91, 133, 105), bp_sys = c(147, 
NA, 100, 160, 135), bp_dia = c(82, NA, 60, 81, 70), t2dm = structure(c(1L, 
2L, 1L, 2L, 1L), .Label = c("0", "1"), class = "factor"), hdl = c(NA, 
1.35, NA, NA, NA), ldl = c(3.41, 3.28, 2.87, 3.7, 3.59), triglyceride = c(2.54, 
1.04, 1.55, NA, 3.43), cholesterol = c(5.08, 5.1, 4.35, 4.82, 
6.06), alt = c(41, 26, 48, 31, 31), ast = c(33, 28, 33, 21, 28
), ggt = c(33, 65, 42, 45, 26), alp = c(70, 79, 51, 88, 70), 
    platelet = c(156, 313, 308, 337, 186), hb = c(14.4, 11.5, 
    15.3, 14.5, 14.2), tsat = c(19, 18, 28, 25, 32), albu = c(4.9, 
    4.5, 5.4, 4.3, 4.6), egfr = c(NA_real_, NA_real_, NA_real_, 
    NA_real_, NA_real_), ferritin = c(171, 70, 499, 156, 94), 
    pt = c(1.04, 0.98, 0.99, 1.12, 0.97), bili = c(11, 5, 6, 
    8, 14), timp1 = c(NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_), p3np = c(NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_), ha = c(NA_real_, NA_real_, NA_real_, NA_real_, 
    NA_real_), glucose = c(5.7, 6.1, 5.4, 13.9, 5.1), insulin_fasted = c(29.8, 
    36.2, 4.9, 11.3, 14.5), hba1c = c(35.522, 58.475, 40.987, 
    79.242, 38.801), fibrinogen = c(NA, 5.9, 3.5, 5.9, 3.1), 
    fib_score = c(3, 0, 0, 0, 2), steatosis_score = c(1, 1, 3, 
    3, 3), inflam_score = c(2, 0, 1, 0, 1), balloon_score = c(2, 
    0, 1, 0, 1), fnash = structure(c(2L, 1L, 1L, 1L, 2L), .Label = c("FALSE", 
    "TRUE"), class = "factor"), f2 = structure(c(2L, 1L, 1L, 
    1L, 2L), .Label = c("FALSE", "TRUE"), class = "factor"), 
    f3 = structure(c(2L, 1L, 1L, 1L, 1L), .Label = c("FALSE", 
    "TRUE"), class = "factor"), nash = structure(c(2L, 1L, 2L, 
    1L, 2L), .Label = c("FALSE", "TRUE"), class = "factor"), 
    fib4 = c(1.84300333252591, 0.980635141316159, 0.63463649053119, 
    0.331915071889987, 1.54703279971167), proc6 = c(9.2, 5.5, 6.2, 5.9, 10.5
    ), proc4 = c(470.9, 298.5, 458.2, 336.7, 516.3), t2 = c(NA, 
    60.6857152393886, 48.2999977793012, NA, 93.842859513419), 
    i7 = c(NA, 113.817410696955, 123.560049194916, NA, 130.116414030393
    ), fibrosc_stiffness = c(14.1, 7, 5.2, 7, 8.8), prognostic_score = c(-1.908509, 
    -25.028315, -3.495727, -27.147848, -10.20379), probability_steatosis = c(NA, 
    0.77446951, 0.114093059, 0.654343677, 0.000105034), diafir.h = c(0.615568767767871, 
    0.534318429857294, 0.890916911895936, NA, 0.779479718924847
    ), gdf15 = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_
    )), row.names = c(NA, -5L), class = c("tbl_df", "tbl", "data.frame"
))
 

Я, кажется, не могу решить эту проблему. Есть какие-нибудь советы здесь?

Я также пытался применить аргумент игнорирования к самому запуску МЫШЕЙ, но это, похоже, займет очень много времени.. кто-нибудь еще испытывал это?

Комментарии:

1. нам нужно просмотреть некоторые ваши данные; используйте команду dput(ваши данные[1:10,]), чтобы поделиться первыми десятью строками; затем отредактируйте свой ответ, включив выходные данные

2. Спасибо, Бен. Я добавил краткий обзор данных. Существуют сотни переменных, так что это снимок нескольких из них.