1

我正在尝试调整一些动态贝叶斯网络代码来处理我自己的(组成的)数据。我正在使用dbnR包在 R 中工作。附上完整代码的屏幕截图,直至出错。所有工作到推理步骤,我收到一条错误消息。我应该看到的是一个可爱的小折线图,它可以预测目标变量随时间的行为。

我的顾问建议折叠数据和/或 sigma 矩阵不是正方形可能是问题所在,但功能齐全的示例代码中的维度也不是正方形。我尝试调整数据值,并将 0,1 二进制更改为 Y,N,然后再返回,但没有结果。我真的很感激任何建议。 错误信息和代码

确切消息:

> obj_var<-c("AnxScl_t_0")
> res3<- (predict_dt(fit3,f_dt_val3,obj_var,verbose=T))  # STILL BROKEN HERE
Error in solve.default(sigma[ev_pos, ev_pos]) : 
  Lapack routine dgesv: system is exactly singular: U[1,1] = 0
In addition: Warning message:
In value[[3L]](cond) :
  The sigma matrix is computationally singular. Using the pseudo-inverse instead.

一个可重现的例子:

DF3 <- structure(list(DepScl = c(8, 6, 7, 8, 9, 5, 7, 5, 6, 8), 
                      AnxScl = c(9, 9, 10, 7, 8, 7, 8, 6, 4, 4), 
                      DMed = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
                      AMed = c(0, 0, 0, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15),
                      SubUse = c(1, 1, 1, 1, 0, 1, 0, 0, 0, 0), 
                      Hallucin = c(0, 1, 1, 1, 0, 0, 1, 0, 0, 0), 
                      SuicIdea = c(1, 0, 0, 0, 1, 0, 0, 0, 0, 1), 
                      Dissoc = c(1, 1, 0, 1, 1, 1, 1, 1, 0, 1), 
                      Work = c(0, 0, 1, 1, 1, 1, 1, 1, 1, 1), 
                      Hospit = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), 
                 row.names = c(NA, 10L), class = "data.frame")

library(dbnR)
size <- 2
net3 <- learn_dbn_struc(DF3, size)
f_dt_val3 <- fold_dt(DF3, size)
fit3 <- fit_dbn_params(net3, f_dt_val3, method="mle")
obj_var <- "AnxScl_t_0"
res3 <- predict_dt(fit3, f_dt_val3, obj_var, verbose=TRUE)

solve.default(sigma[ev_pos, ev_pos]) 中的错误:
Lapack 例程 dgesv:系统完全是奇异的:U[2,2] = 0
另外:警告消息:
在 value[3L] 中:
sigma 矩阵在计算上是奇异的。改为使用伪逆。

4

0 回答 0