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 предикторов.