#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. Спасибо, Бен. Я добавил краткий обзор данных. Существуют сотни переменных, так что это снимок нескольких из них.