Я начинаю использовать пакет pcalg
, и у меня есть некоторые сомнения относительно функций pdag2allDags
и addBgKnowledge
:
Я использую образец данных gmG
, предоставленный пакетом
library(pcalg)
library(Rgraphviz)
data("gmG")
df<-gmG$x
suffStat <- list(C = cor(df), n = nrow(df))
fci.fit<-fci(suffStat, indepTest = gaussCItest, p = ncol(df),alpha = 0.01)
plot(fci.fit)
Я хотел бы получить все эквивалентные DAG. Судя по документации, должно работать с помощью функции pdag2allDags
(из здесь< /а>). Нам нужно просто получить данные amat
(adjacent matrix).
Судя по спецификациям в документации, я подумал, что следующее должно работать...
plotAllDags <- function(res) {
require(graph)
p <- sqrt(ncol(res$dags))
nDags <- ceiling(sqrt(nrow(res$dags)))
par(mfrow = c(nDags, nDags))
for (i in 1:nrow(res$dags)) {
tmp <- matrix(res$dags[i,],p,p)
colnames(tmp) <- rownames(tmp) <- res$nodeNms
plot(as(tmp, "graphNEL"))
}
}
res1<-pdag2allDags(as(fci.fit,"amat"))
plotAllDags(res1)
Но вместо этого он возвращает:
Ошибка в sqrt(ncol(res$dags)) : нечисловой аргумент математической функции
Мы также видим amat
в объекте fci'
s. Итак, я попробовал:
res2<-pdag2allDags(fci.fit@amat)
plotAllDags(res2)
Он также возвращает то же самое:
Ошибка в sqrt(ncol(res$dags)) : нечисловой аргумент математической функции
Но если я использую алгоритм pc
, он работает:
pc.fit<-pc(suffStat, indepTest = gaussCItest, p = ncol(df),alpha = 0.01)
plot(pc.fit)
res0<-pdag2allDags(as(pc.fit,"amat"))
plotAllDags(res0)
Что происходит? Разве pdag2allDags
не предназначено для работы со всеми объектами amat
(pc, fci, rfci и т. д.)? Я не смог найти в документации никакой другой функции ...allDags
. Как получить все эквивалентные DAG из вывода функции fci
?
То же самое происходит и с функцией addBgKnowledge
. Это работает для pc
:
pc.amat2<-addBgKnowledge(gInput = pc.fit@graph,x=1,y=2)
plot(pc.amat2)
но не для fci
, даже в документации это сказано использует amat
fci.amat2<-addBgKnowledge(gInput = as(fci.fit,"amat"),x=1,y=2)
plot(as(t(fci.amat2),"graphNEL"))
Он обеспечивает:
Ошибка в h(simpleError(msg, call)) : ошибка в оценке аргумента 'x' при выборе метода для функции 'plot': аргумент не является матрицей