正在运行数据集上的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来绘制这些模型及其(直接)关系.但是,我没有找到可以根据另一个变量(在这种情况下是模型大小)对节点进行分组的布局:在这个设置中,创建这个图形并保持具有相同模型的模型的“带”似乎是一个好主意size(模型中的变量数).
我最终做了什么,或多或少通过一堆代码自己计算每个节点的位置(我太尴尬将要发布在这里),但我总是想知道我是否只是错过了更好/更好的的解决方案.
我自己的代码生成了这样的图形(你可以忽略颜色和标签 – 只知道水平轴保持模型大小):
更加优雅地实现这种图形的建议,以及自己完成所有艰苦工作,非常感谢.
最佳答案 igraph的开发版本中的Fruchterman-Reingold布局算法(即0.6,尚未正式发布,但您可以要求Gábor在
mailing list上发送给您一份副本)有两个隐藏的(即尚未记录的)参数:miny和maxy.它们允许您约束范围内节点的Y坐标,因此您可以使用它来创建图层.
或者,我正在为igraph现在开始实施Sugiyama分层图布局方法,我将在一两天内将它合并到开发树(如果事情进展顺利),然后你可以试试.