R mouse: указание максимального количества предикторов с использованием quickpred

Я нашел quickpred функция в mice полезно для предоставления некоторых рекомендаций по выбору переменных для использования в качестве предикторов в процессе множественного вменения. Я недавно натолкнулся на сценарий, где quickpred уменьшено количество предикторов для данного результата до 800+ переменных. Из любопытства можно ли указать максимальное количество предикторов (скажем, 15) на результат, выбранный функцией?

Например:

От mice файлы справки пакета,

df <- mice::nhanes

# default: include all predictors with absolute correlation over 0.1
quickpred(df)

# all predictors with absolute correlation over 0.4
quickpred(df, mincor=0.4)

# include age and bmi, exclude chl
quickpred(nhanes, mincor=0.4, inc=c('age','bmi'), exc='chl')

# only include predictors with at least 30% usable cases
quickpred(nhanes, minpuc=0.3)

1 ответ

Решение

Обновление на основе дополнительной информации в комментариях

Как насчет этого подхода тогда. Пробежаться по сетке корреляций - вычислить количество предикторов в строке и затем передать quickpred индивидуальные корреляции для отражения порогового требования.

Для 1 или менее предикторов на прогноз (изменение x<=1 чтобы изменить это):

grid <- seq(0.1, 0.5, 0.05)
result <- apply(sapply(grid, function(x) { rowSums(quickpred(df, mincor=x)) } ), 1, function(x) {min(which(x<=1))})
result
age bmi hyp chl 
  1   7   8   8 

Так что используйте первое соотношение из grid для переменной 1, номер 7 из переменной 2 и т. д.

Это может быть вставлено непосредственно в quickpred

> quickpred(df, mincor=grid[result])
    age bmi hyp chl
age   0   0   0   0
bmi   0   0   0   0
hyp   1   0   0   0
chl   1   0   0   0

где у нас есть максимум 1 предиктор на переменную. Если мы хотим 3 или менее предикторов, мы получаем

> quickpred(df, mincor=grid[result])
    age bmi hyp chl
age   0   0   0   0
bmi   1   0   1   1
hyp   1   0   0   1
chl   1   1   1   0

Оригинальный ответ

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

Например, если я иду через корреляции, определенные seq(0.1, 0.5, 0.05), вычислите суммы столбцов соответствующих двоичных quickpred Матрица прогнозирования (чтобы получить информацию о том, какие столбцы / переменные включены в прогноз где-то), а затем подсчитать количество ненулевых столбцов. Я использую следующий код

grid <- seq(0.1, 0.5, 0.05)
result <- sapply(grid, function(x) { sum(colSums(quickpred(df, mincor=x))>0) } )

который производит

> result
[1] 4 4 4 4 4 4 3 1 1

Скажем, я хотел только 1 предиктор в моей модели. Затем я должен был бы использовать минимальную абсолютную корреляцию 0,45 (=grid[min(which(result <= 1))]) поскольку это первый раз, когда моя матрица прогнозирования заканчивается одним предиктором (во всяком случае, из этой таблицы).

> quickpred(df, mincor=.45)
    age bmi hyp chl
age   0   0   0   0
bmi   0   0   0   0
hyp   1   0   0   0
chl   1   0   0   0

Так age является предиктором И с mincor=.4 я получил

> quickpred(df, mincor=.40)
    age bmi hyp chl
age   0   0   0   0
bmi   0   0   0   0
hyp   1   0   0   1
chl   1   0   1   0

который включает в себя 3 предикторов.

Другие вопросы по тегам