Функция cpquery bnlearn всегда возвращает 0 для простых дискретных искусственных данных - PullRequest
1 голос
/ 02 апреля 2019

Я хочу рассчитать условные вероятности на основе байесовской сети на основе некоторых двоичных данных, которые я создаю.Однако при использовании bnlearn::cpquery всегда возвращается значение 0, а bnlearn::bn.fit соответствует правильной модели.

# Create data for binary chain network X1->Y->X2 with zeros and ones.
# All base rates are 0.5, increase in probability due to parent = .5 (from .25 to.75)
X1<-c(rep(1,9),rep(1,3),1,rep(1,3),rep(0,3),0,rep(0,3),rep(0,9))
Y<-c(rep(1,9),rep(1,3),0,rep(0,3),rep(1,3),1,rep(0,3),rep(0,9))
X2<-c(rep(1,9),rep(0,3),1,rep(0,3),rep(1,3),0,rep(1,3),rep(0,9))
dag1<-data.frame(X1,Y,X2)

# Fit bayes net to data.
res <- hc(dag1)
fittedbn <- bn.fit(res, data = dag1)
# Fitting works as expected, as seen by graph structure and coefficients in fittedbn:
plot(res)
print(fittedbn)

# Conditional probability query
cpquery(fittedbn, event = (Y==1), evidence = (X1==1), method = "ls")
# Using LW method
cpquery(fittedbn, event = (Y==1), evidence = list(X1 = 1), method = "lw")

'cpquery' просто возвращает 0. Я также пытался использовать predictфункция, однако это возвращает ошибку:

predict(object = fittedbn, node = "Y", data = list(X1=="1"), method = "bayes-lw", prob = True)
# Returns:
# Error in check.data(data, allow.levels = TRUE) : 
#  the data must be in a data frame.

В приведенном выше cpquery ожидаемый результат равен 0,75, но возвращается 0.Это не относится к этому событию или свидетельству, независимо от того, какое событие или свидетельство я вставил (например, event = (X2==1), evidence = (X1==0) или event = (X2==1), evidence = (X1==0 & Y==1)), функция возвращает 0.

Одна вещь, которую я попробовал, так как я думал, что маленькаяКоличество наблюдений может быть проблемой, это просто увеличить количество наблюдений (то есть вертикальная конкатенация вышеупомянутого кадра данных с самим собой несколько раз), однако это не изменило вывод.

Я видел многотемы на cpquery и что она может быть хрупкой, но ни одна не указывает на эту проблему.Обратите внимание: пример в документации 'cpquery' работает должным образом, поэтому, похоже, проблема не в моей среде.

Любая помощь будет принята с благодарностью!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...