在R代码中,pcalg包。如何在pcSelect中编写稳定的方法与pc_stable类似?我只想将稳定的方法写入pcSelect,如下所示:
while (!done && any(G)) {
n.edgetests[ord+1] <- 0
done <- TRUE
ind <- which(G)
remainingEdgeTests <- length(ind)
if(verbose>=1)
cat("Order=",ord,"; remaining edges:",remainingEdgeTests,"\n", sep='')
if(method == "stable") {
#View(G)
## Order-independent version: Compute the adjacency sets for any vertex
## Then don't update when edges are deleted
G.l <- split(G, gl(p,p))
#View(G.l)
}
然而,G.l<-split(G,gl(p,p))
在这里没有成功,请你帮帮我,谢谢。
答案 0 :(得分:0)
PC和PC Stable之间的差异是算法的Skeleton阶段的变化,由skeleton()
中的pcalg
函数实现。 pcSelect()
函数只是试图学习一个特定变量的邻接集,而不是图的整个结构,所以它不会调用skeleton()
。您似乎正在尝试将具有稳定修改的skeleton
部分直接复制到pcSelect
。但是,在skeleton
中,G是一个矩阵,在pcSelect
中,G是一个向量。当您尝试应用split()
函数时,这会给您一个错误,该函数适用于矩阵但不适用于矢量。
那么你需要在pcSelect
中实现稳定的修改?从R文档中看,pcSelect
是PC简单算法的一种实现,发表于Buehlmann,P.,Kalisch,M。和Maathuis,M.H。 (2010年)。 “高维线性模型的变量选择:部分忠实的分布和PC简单算法。” Biometrika 97 ,261-278。这篇文章在Arxiv上:http://arxiv.org/abs/0906.3204。
在Arxiv版本的第278行中,作者描述了如何通过在每个阶段创建一个新的回归量“活动集”来去除边缘。如上所述,在创建新的活动集之前,相关性测试中的条件设置范围超过活动集中的所有变量。换句话说,每次测试后都不会从活动集中删除变量;其中一组在每个阶段结束时被删除,因此不依赖于每个阶段的测试顺序。这相当于对PC的稳定修改。
如果pcSelect
实现遵循其发布的描述,那么您不必担心:它已经内置了稳定修改。source code of pcSelect有点不透明,但我认为这就是它在做什么。所以你不需要改变pcSelect
中的任何内容!