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