在数据集上运行例如 cv.glmnet 会给我(默认情况下)100 个不同的模型。现在,如果我的数据集缺少数据,我可以进行多重插补(比如 10 次插补)并对每个插补运行 cv.glmnet。
如果我忽略每个模型的实际系数值,而只查看选定的特征(即列名集),一些模型是其他模型的子模型。
像这样的代码在某种程度上模仿了结果:
usevars<-paste("var", 1:100, sep="")
mdls<-replicate(1000, {
numVars<-sample.int(length(usevars), 1)
sample(usevars, numVars)
})
names(mdls)<-paste("mdl", 1:1000, sep="")
现在,在这方面很容易获得子模型的父子关系。也可以只包括“直接父母身份”(即,如果模型 A 是 B 的孩子,而 B 是 C 的孩子,则不包括 A 和 C 之间的关系)。
最后,我来解决我的问题:我使用 igraph 来绘制这些模型及其(直接)关系。但是,我没有找到可以基于另一个变量(在本例中为模型大小)对节点进行分组的布局:在此设置中,创建此图似乎是一个好主意,其中包含具有相同模型的模型“带”大小(模型中的变量数)。
我最终做的,或多或少是通过一堆代码自己计算每个节点的位置(我不好意思在这里发布),但我一直想知道我是否只是错过了一个更好的/out-开箱即用的解决方案。
我自己的代码生成了这样的图表(您可以忽略颜色和标签 - 只知道水平轴包含模型大小):
非常感谢有关实现这种图表的建议,而不是自己完成所有艰苦的工作。