如何在pcSelect中编写稳定的方法与pc_stable类似

时间:2015-06-04 02:41:16

标签: r

在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))在这里没有成功,请你帮帮我,谢谢。

1 个答案:

答案 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中的任何内容!