R mice:使用 quickpred 指定最大预测变量数

R mice: Specifying maximum number of predictors using quickpred

我发现 mice 中的 quickpred 函数在提供一些指导方面很有用:选择变量以用作多重插补过程中的预测变量。我最近遇到了一个场景,其中 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)

根据评论中的额外信息更新

那么这个方法怎么样。 运行 通过相关性网格 - 计算每 的预测变量数量,然后提供 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,变量 2 中的数字 7 等

这个可以直接插入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

原回答

您可能可以通过自己计算参数的数量来解决这个问题,然后 select 给出所需预测变量数量的截止值。

例如,如果我通过 seq(0.1, 0.5, 0.05) 定义的相关性,计算相应二进制 quickpred 预测矩阵的列总和(以获取有关哪些 columns/variables 包含在某处的预测),然后计算非零列的数量我使用以下代码

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 个预测变量。