我发现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)
答案 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个预测因子。