Функция R мышей не применяет настраиваемую матрицу предикторов - PullRequest
1 голос
/ 31 мая 2019

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

Моя проблема : я не хочу, чтобы каждая переменная вменялась всегда, потому что у меня есть несколько точек измерения. Так что, конечно, мои переменные в t4 многие пропали без вести, но я не хочу вменять их, когда люди просто не заполнили анкету на тот момент.

Таким образом, я указал матрицу предиктора, в которой вменяются все переменные в момент времени t0 (например, A103.0), но не в момент времени t4 (A103.4). Однако, когда мы запускаем мышь, он просто использует «pmm» для всех переменных, и каждая переменная вменяется.

Любые предложения о том, что пошло не так, высоко ценятся, я потратил довольно много времени, пытаясь выяснить, что произошло ..

Вот что я сделал:

Я создаю объект со всеми столбцами, которые я хочу вписать

impute <- c("A103", "A104", "A107", #SVF
            "A302.0", "A303.0", "A304.0", "A305.0", "A306.0",
            "A502_01.0", "A502_02.0", "A502_03.0", "A502_04.0",
            "A504.0","A506.0", "A508.0", "W003.0", "W005.0", 
            "A509_02.0", "A509_03.0", "A509_06.0", "A509_10.0",
            "A302.4", "A303.4", "A304.4", "A305.4", "A306.4", 
            "A502_01.4", "A502_02.4", "A502_03.4", "A502_04.4", 
            "A504.4", "A506.4", "A508.4","W003.4", "W005.4", "SD02_01",
            "SD03",
            "A509_02.4", "A509_03.4", "A509_06.4", "A509_10.4")

Я создаю подмножество столбцов (и все строки, конечно), которые я хочу вменять

imp <- mice(ds_wide[ ,impute], maxit=0)
imp$PredictorMatrix

pred <- imp$predictorMatrix

pred [c("A302.4", "A303.4", "A304.4", "A305.4", "A306.4", #ABB.4
      "A502_01.4", "A502_02.4", "A502_03.4", "A502_04.4", #PSWQ.4
      "A504.4", "A506.4", "A508.4","W003.4", "W005.4", "SD02_01",
      "SD03",
      "A509_02.4", "A509_03.4", "A509_06.4", "A509_10.4"), ] <- 0

View(pred) #looks exactly how I want it to look like

imp <- mice(ds_wide[ ,impute], m=5, predictorMatrix = pred)
miceimp <- complete (imp)
anyNA(miceimp)
View(miceimp)

Когда я проверяю miceimp (мой результат), пропущенных значений нет вообще, поэтому все переменные в t4 вменяются, даже если я указал иное. Что я сделал не так?

На самом деле, что было бы лучше для меня, было бы, если бы я мог как-то вменять те переменные в момент времени t4, которые имеют не только пропуски. Таким образом, те люди, которые заполнили t4, должны быть вменены, а те, кто не находится в этой точке измерения, не должны. Если у кого-то есть идеи, как сделать это возможным, это было бы здорово!

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

В «мышах», помимо указания «predMatrix» в качестве нуля для переменных, которые не должны быть вменены, необходимо указать («») в «методе» для этих переменных.

0 голосов
/ 12 июня 2019

Я не совсем уверен, что на 100% понял, что вы пытаетесь заархивировать.

Я понял, что вы не хотите вменять все свои переменные (но вы хотите включить все свои переменные в качестве входных данных дляалгоритм)

Вы пытались определить параметр ForexMatrix

ForexMatrix
Числовая матрица длины (блоков)строки и столбцы ncol (данные), содержащие данные 0/1, определяющие набор предикторов, которые будут использоваться для каждого целевого столбца.Каждая строка соответствует блоку переменных, т. Е. Множеству переменных, которые должны быть вменены.Значение 1 означает, что переменная столбца используется в качестве предиктора для целевого блока (в строках).По умолчанию предикторная матрица представляет собой квадратную матрицу строк и столбцов ncol (данных) со всеми единицами, кроме диагонали.Примечание: для двухуровневых моделей вменения (в названии которых есть «2l») также допускаются другие коды (например, 2 или -2).

Мне кажется, этот параметр используетсяопределить, какие переменные используются в качестве входных данных.Для сравнения параметр , где , звучит для меня как правильный параметр, определяющий, какие переменные должны быть вменены.

, где Фрейм данных или матрица с логикойте же измерения, что и данные, указывающие, где в данных должны быть созданы вменения.По умолчанию, где = is.na (данные), указывает, что пропущенные данные должны быть вменены.Аргумент where может использоваться для переоценки наблюдаемых данных или для пропуска вменений для выбранных пропущенных значений.

Поэтому мой вывод будет заключаться в том, чтобы опробовать параметр where вместо ForexMatrix.

...