我正在尝试调整一些动态贝叶斯网络代码来处理我自己的(组成的)数据。我正在使用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 矩阵在计算上是奇异的。改为使用伪逆。