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

时间:2017-08-11 06:25:35

标签: r r-mice

我发现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 个答案:

答案 0 :(得分:0)

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

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

原始回答

您可以通过自己计算参数数量来解决这个问题,然后选择能够为您提供所需数量的预测变量的截止值。

例如,如果我查看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个预测因子。