关于数据挖掘:视频课程R语言bnlearn包贝叶斯网络的构造及参数学习的原理和实例

2次阅读

共计 10868 个字符,预计需要花费 28 分钟才能阅读完成。

全文链接:http://tecdat.cn/?p=32462

原文出处:拓端数据部落公众号

分析师:Chang Zhang

贝叶斯网络(BN)是一种基于有向无环图的概率模型,它形容了一组变量及其相互之间的条件依赖性。贝叶斯网络在信息不齐备的状况下通过能够察看随机变量推断不可察看的随机变量,对于解决简单的不确定性和关联性问题有很强的劣势。

基本概念

有向无环图(DAG):DAG 的结点 V 包含随机变量(类别和特色),有向连贯 E(A->B)示意结点 A 是结点 B 的 parent,且 B 与 A 是有依赖关系的(不独立)。
条件概率表汇合:引入了一个条件性独立(conditional independence)概念,即图中任意结点 v 在给定 v 的 parent 结点的状况下,与图中其它结点都是独立的,也就是说 P(v|par(v),x1,x2…,xn) = P(v|par(v))。这里 par(v)示意 v 的 parent 结点集,x1,x2,…,xn 示意图中其它结点。

贝叶斯网络施行步骤

1、确定随机变量间的拓扑关系,造成 DAG。
2、训练贝叶斯网络参数——预计出各节点的条件概率表。这一步也就是要实现条件概率表的结构。

构造学习

1、基于评分搜寻的办法:将构造学习视为组合优化问题,首先通过定义评分函数对 BN 构造空间中的不同元素与样本数据的拟合水平进行度量,而后利用搜索算法确定评分最高的网络结构,即与数据拟合最好的网络结构。

2、基于束缚的办法:利用统计或信息论的办法定量的剖析变量间的依赖关系以获取最优地表白这些关系的网络结构。首先对训练数据集进行统计测试,尤其是条件独立性测试,确定出变量之间的条件独立性,而后利用变量之间的条件独立性结构一个有向无环图,以尽可能多的涵盖这些条件独立性。

3、基于评分搜寻和束缚相混合的办法:首先采纳条件独立性测验缩减搜寻空间,而后将此搜寻空间作为输出以限度基于评分的搜寻。

构造学习——基于评分搜寻的办法

将构造学习视为组合优化问题,首先通过定义评分函数对 BN 构造空间中的不同元素与样本数据的拟合水平进行度量,而后利用搜索算法确定评分最高的网络结构,即与数据拟合最好的网络结构。

1、爬山法(hc):从一个初始的网络结构开始,通过加边、减边和转边三个搜寻算子对以后网络结构进行批改,并对批改后的网络结构进行评分,最初找出评分最高的构造

2、禁忌搜寻(tabu): 是一种亚启发式随机搜索算法,通过对部分畛域逐渐搜寻失去全局最优解。为了防止陷入部分最优和反复迭代,禁忌搜索算法采纳了一种禁忌表,利用该表对解的挪动搜寻过程进行记录和抉择,当搜寻的最优解曾经在禁忌表中时,则会主动放弃该解,防止反复搜寻。

构造学习——基于束缚的办法(Grow-Shrink)

构造学习——基于混合的办法

MMHC 算法联合了条件独立性测试、搜寻和评分等办法, 该算法分为 2 个阶段, 在第 1 阶段利用 MMPC (max-min parents and children) 算法构建贝叶斯网络结构的框架, 在第 2 阶段执行评分搜寻确定网络结构的边以及边的方向.

参数学习

R 语言贝叶斯网络疾速介绍

贝叶斯网络

定义

贝叶斯网络(BNs)的定义是:

  • 一个网络结构,一个有向无环图 , 其中每个节点  对应于一个随机变量 ;
  • 一个全局概率分布  (带参数), 它能够依据图中存在的弧被分解成更小的部分概率分布。

网络结构的次要作用是通过图形拆散来表白模型中各变量之间的条件独立性关系,从而指定全局散布的因子化。

每个部分散布都有本人的参数集 ; 而⋃  要比小得多,因为许多参数是固定的,因为它们所属的变量是独立的。

R 实现了以下学习算法。

基于束缚的:PC, GS, IAMB, MMPC, Hilton-PC\
基于分数的:爬山算法、Tabu Search\
配对的:ARACNE, Chow-Liu\
混合:MMHC, RSMAX2

咱们应用基于分数的学习算法,希尔算法。首先,咱们将先为本教程生成简略的数据集。

在这个数据集中,’ 状态 ’ 与 ’ 元素 ’ 和 ’ 承受 ’ 列有关系。而 ’ 类型 ’ 与 ’ 色彩 ’ 列有关系。当你创立一个带有分类数据的数据框时,列应该是一个因子类型。否则,该数据框不能用于 BN 构造的创立。

 \
接下来,咱们将创立学习构造。

\
咱们能够在一个图中看到构造。

> plot(hc_simd)

在这个图中,状态、元素、承受、类型和色彩被称为节点。节点之间的方向用弧线形容,弧线是一个蕴含从元素到元素方向数据的矩阵。\

如上弧线显示,在咱们的数据中存在 ’ 类型 ’ 到 ’ 色彩 ’,以及 ’ 状态 ’ 到 ’ 承受 ’ 和 ’ 元素 ’ 的关系。’ 类型 ’ 和 ’ 状态 ’ 是两个独立的组,它们之间不存在相互依赖关系。\
接下来,咱们将用数据来拟合模型。

simd_fitted

基于上述训练数据,咱们能够进行条件概率查问。

咱们查看 “Outlier “ 和 “Target “ 的状态概率。

\
\
该样本成为 “ 离群 “ 的概率为 51%。

状态成为 “ 指标 “ 的概率是 0%。

错颌畸形数据的贝叶斯网络分析

问题: 受第三类错牙合畸形影响的患者(以下牙弓突出为特色),其骨骼不均衡在生命晚期就产生,在青春期和骨骼成熟前会变得更加显著。在单个 III 类患者中晚期预测医治的胜利或失败,使其更容易改正,但仅从大量的状态决定因素中预测是很难做到的。起因是 III 类错颌畸形很少是繁多颅面部件异样的后果,所以单个的临床和放射学测量值可能不如测量值自身的相互作用具备批示性。

工作:

  1. 咱们学习一个 BN,并应用它来确定和可视化在成长和医治过程中各种 III 类错位颌面特色之间的相互作用。
  2. 咱们通过验证一些广泛承受的对于这些骨骼不均衡演变的假说来测验其一致性。
  3. 咱们表明,与承受疾速上颌扩张和面罩医治的正畸患者相比,未经医治的受试者造成了不同的 III 类颅面成长模式。
  4. 在承受医治的患者中,CoA 段(上颌骨长度)和 ANB 角(上颌骨与下颌骨的前后关系)仿佛是承受医治的次要影响的骨骼亚空间。

数据

咱们将应用的数据集蕴含 143 名患者,在 T1 和 T2 年龄段有两组测量数据(以年为单位),用于以下变量。

  • 医治:未经医治(NT),医治后成果不好(TB),医治后成果好(TG)。
  • 成长:一个二元变量,数值为好或坏。
  • ANB:唐氏点 A 和 B 之间的角度(度)。
  • IMPA:门牙 - 下颌平面角(度)。
  • PPPM:腭立体 - 下颌立体的角度(度)。
  • CoA:上颌骨从髁状突到唐氏点 A 的总长度(mm)。
  • GoPg:下颌体从齿龈到齿龈的长度(mm)。
  • CoGo:下颌骨的长度,从髁状突到齿状突(mm)。

所有的测量都是通过 X 射线扫描得出的,应用一套参考点建设的图,如以下。

> str(data)

预处理和探索性数据分析

首先,咱们创立一个数据框架,其中包含所有变量的差别以及增长和医治。

成长和医治变量带有对于病人预后的冗余信息,这一点从 TB 和 TG 之间成长良好的病人比例的差别中能够看出。

为了防止在模型中包含这两个变量所导致的混淆,咱们将医治从新编码为一个二元变量,0 示意 NT,1 示意 TB 或 TG。同样地,咱们对成长进行从新编码,0 示意坏,1 示意好。

因为咱们将应用高斯 BN 进行剖析,查看这些变量是否是正态分布;从上面的图来看,仿佛并非所有的变量都是如此。


+   hist(x, prob = TRUE)
+   lines(density(x), lwd = 2 )

这些变量是通过线性关系分割起来的吗?其中一些是,但不是全副。

> pairs(diff[, setdiff(names(diff) 
 

最初,咱们能够看看这些变量是否以任何形式聚在一起,因为聚在一起的变量更有可能在 BN 中产生分割。


> heatmap(rho)

咱们能够在热图中看到两个集群:第一个集群包含 dCoGo、dGoPg 和 dCoA,第二个集群包含 Treatment、dANB 和 dCoA。第一个聚类在临床上很有意思,因为它包含医治和两个都与唐氏 A 点无关的变量,这为医治的次要成果提供了一些线索。

plot(ug)

模型 #1:作为差别模型的动态贝叶斯网络

在这里,咱们应用保留在 diff 中的差别来为数据建模,而不是原始值;咱们将应用 GBN 解决,因为所有变量都是数字。对差别进行建模会导致部分散布,其模式为回归模型

其中 对于其余回归因子,以此类推。咱们能够将这种回归改写为

这是一组微分方程,对变化率进行建模,其关系被假设为很好地近似于线性关系。然而,这种表述依然意味着原始值随工夫线性变动,因为变化率取决于其余变量的变化率,但不取决于工夫自身。要有一个非线性的趋势,咱们须要

此外,包含增长变量意味着咱们能够有以下模式的回归模型 

从而容许不同的变化率,这取决于病人是否在畸形中体现出踊跃的倒退,以及他是否正在承受医治。

学习贝叶斯网络

学习构造

学习 BN 的第一步是学习其构造,即 DAG . 咱们能够应用数据(来自不同的数据框架)联合先验常识来做这件事;联合后者能够缩小咱们必须摸索的模型空间,并生成更弱小的 BN。一个间接的办法是将那些编码咱们晓得不可能 / 实在的关系的弧列入黑名单; 并将那些编码咱们晓得存在的关系的弧列入白名单。

黑名单只是一个矩阵(或一个数据框),其中有 from 和 to 两列,列出了咱们不心愿在 BN 中呈现的弧。

  • 咱们把任何指向正畸变量中的 dT、医治和成长的弧列入黑名单。
  • 咱们将从 dT 到 Treatment 的弧列入黑名单。这意味着一个病人是否被医治不会随工夫而扭转。
  • 咱们将从成长到 dT 和医治的弧线列入黑名单。这意味着病人是否承受医治不会随工夫变动,而且显然不会因预后而变动。

白名单的构造与黑名单雷同。

  • 咱们将依赖构造 dANB → dIMPA ← dPPPM 列入白名单。
  • 咱们将从 dT 到 Growth 的弧线列入白名单,这使得预后能够随工夫变动。

一个简略的学习  办法是在整个数据上找到具备最佳拟合度的网络结构。例如,应用 hc()与默认分数(BIC)和整个 diff 数据框架。

至于绘图,要害函数是 plot()。

plot(dag, , highlight)

然而,dag 的品质要害取决于变量是否是正态分布,以及连贯它们的关系是否是线性的;从探索性剖析来看,并不分明所有的变量都是如此。咱们也不晓得哪些弧线代表强关系,也就是说,它们能抵制数据的扰动。咱们能够用 boot 来解决这两个问题。

  1. 应用 bootstrap 对数据从新取样。
  2. 从每个 bootstrap 样本中学习一个独自的网络。
  3. 查看每个可能的弧在网络中呈现的频率。
  4. 用呈现频率较高的弧构建一个共识网络。
booth(diff, R = 200)

boot.strength()的返回值包含,对于每一对节点,连贯它们的弧的强度(例如,咱们察看到 dANB → dPPPM 或 dPPPM → dANB 的频率)及其方向的强度(例如,当咱们察看到 dANB 和 dPPPM 之间有弧时,咱们察看到 dANB → dPPPM 的频率)。

attr("threshold")

因而,averaged.network()取所有强度至多为 0.585 的弧,并返回一个均匀的共识网络,除非指定不同的阈值。

> avg.diff = averaged.network(str.diff)

纳入咱们当初领有的对于弧线强度的信息。

> strength.plot(avg.diff, str.diff, shape = "ellipse", highlight = list(arcs = wl))

 

咱们如何将均匀的网络(avg.diff)与咱们最后从所有数据中学习到的网络(dag)进行比拟?最定性的办法是将两个网络并排绘制,节点地位雷同,并突出显示一个网络中呈现而另一个网络中没有的弧,或者呈现的方向不同的弧。

> par(mfrow = c(1, 2))
> graphviz.compare(avg.diff, dag, shape = "ellipse", main = c("averaged DAG", "single DAG"))

咱们能够看到,Treatment→dIMPa、dANB→dGoPg 和 dCoGo→dPPPM 这些弧线只呈现在均匀网络中,而 dPPPM→dANB 只呈现在咱们从所有数据中学到的网络中。咱们能够假如,前三个弧被数据的噪声加上小样本量和偏离常态的状况所暗藏。编程能够返回真阳性(呈现在两个网络中的弧)和假阳性 / 阴性(只呈现在两个网络中的一个的弧)的数量。

> compare

或弧 =TRUE。

然而,思考到网络是用 BIC 学习的,而 BIC 是等价的,那么所有的弧线方向是否都很确定?看一下 dag 和 avg.diff 的 CPDAGs(并思考到白名单和黑名单),咱们看到没有无方向的弧。所有弧的方向都是惟一的。

最初,咱们能够联合来进行原则性的比拟,如果两个弧被惟一确定为不同,咱们就说它们是不同的。

也能够看一下对于弧长散布的阈值:均匀的网络是相当密集的(9 个节点有 17 个弧),很难浏览。

> plot(str.diff)
> abline(v = 0.75, col = "tomato", lty = 2, lwd = 2)
> abline(v = 0.85, col = "steelblue", lty = 2, lwd = 2)

因而,把阈值进步一点,多剔除几个弧就好了。看一下下面的图,因为弧长散布的差距,较高的阈值的两个自然选择是 0.75(红色虚线)和 0.85(蓝色虚线)。

> nrow(strength >  "threshold" direction > 0.5,])
[1] 18
 trength > 0.75 &  direction > 0.5 
[1] 15
 strength > 0.85 &  direction > 0.5 
[1] 12

咱们通过在 network()中设置阈值 =0.85 失去的更简略的网络如下所示;从定性的角度来看,它当然更容易推理。

> avg.simpler = averaged.network(str.diff, threshold = 0.85)
> strength.plot(avg.simpler, str.diff, shape = "ellipse", highlight = list(arcs = wl))

学习参数

在学习了构造之后,咱们当初能够学习参数。因为咱们正在解决连续变量,咱们抉择用 GBN 来建模。因而,如果咱们应用最大似然预计来拟合网络的参数,咱们就会发现每个部分散布都是一个典型的线性回归。

fit(avg, diff)

咱们能够通过比拟 bn.fit()和 lm()产生的模型,例如 dANB,很容易确认这是事实。

 
> summary(lm(dANB ~ Growth + Treatment, data = diff))

咱们会不会有共线性的问题?实践上是可能的,但在实践中,从数据中学习的网络结构大多不是问题。起因是,如果两个变量  和是共线性的,在减少(比如说)Xi←Xj 之后,那么 Xj←Xk 将不再显著进步 BIC,因为 Xj 和 Xk(在某种程度上)提供了对于 Xi 的雷同信息。


> # 逐步减少解释变量之间的关联性。> for (rho 5)) {

+   # 更新相关矩阵并生成数据。+   R  = R = rho
+   data = as.data.frame(mvrnorm(1000))
+   # 比拟线性模型
+   cat( "BIC:",

+ } 

 

比拟线性模型 

如果参数估计因任何起因呈现问题,咱们能够用一组新的、来自不同办法的估计值来取代它们。


 dANB

 dANB = penalized(dANB)
 dANB

模型验证

有两种次要的办法来验证一个 BN。

  1. 只看网络结构:如果学习 BN 的次要指标是辨认弧和门路,当 BN 被解释为因果模型时,通常是这种状况,咱们能够进行实质上的路径分析和钻研弧的强度。
  2. 将 BN 视为一个整体,包含参数:如果学习 BN 的次要指标是将其作为一个专家模型,那么咱们可能想。

    • 依据其余一些变量的值,预测新个体的一个或多个变量的值;以及 \
       
    • 将 CP 查问的后果与专家常识进行比拟,以确认 BN 反映了对于咱们正在建模的景象的最佳常识。

预测准确性

咱们能够用通常的办法来掂量咱们所抉择的学习策略的预测准确性,即穿插验证。实现了:

  • k-fold 穿插验证;
  • 指定的 k 进行穿插验证;
  • hold-out 穿插验证

对于:

  • 构造学习算法(构造和参数都是从数据中学习的)。
  • 参数学习算法(构造由用户提供,参数从数据中学习)。

首先,咱们查看 Growth,它编码了错牙合畸形的演变(0 示意坏,1 示意好)。咱们查看它,把它转回离散变量并计算预测误差。

cv(diff)

> for (i in 1:10) {+   err[i] = (sum(tt) - sum(diag(tt))) / sum(tt)

+ }
> 

其余变量是间断的,所以咱们能够预计它们的预测相关性来代替。


> for (var in names(predcor)) {+   xval = cv(diff)

+     predcor[var] = mean(sapply(xval, function(x) attr(x, "mean")))

+ }

在这两种状况下,咱们应用损失函数的变体,它应用从所有其余变量计算的后验期望值进行预测。根本的损失函数(cor, mse, pred)仅仅从它们的父代来预测每个节点的值,这在解决很少或没有父代的节点时是没有意义的。

用专家常识进行确认

确认 BN 是否有意义的另一种办法是把它当作的工作模型,看看它是否表白了对于要害事实,这些事实在学习过程中没有作为先验常识应用。否则,咱们将只是拿回咱们放在先验中的信息)。一些例子。

  1. “CoGo 的适度增长应该会引起 PPPM 的缩小 ”。\
    咱们通过为存储在 fitted.simpler 中的 BN 生成 dCoGo 和 dPPPM 的样本,并假如没有产生任何解决,来测试这个假如。随着 dCoGo 的减少(这表明增长越来越快),DPPPM 变得越来越负(这表明假如角度最后是正的,则角度会缩小。

    > sim = dist(fitted.simpler)
    > plot(sim)
    > abline(v = 0, col = 2, lty = 2, lwd = 2)
     

  2. “CoGo 的小幅增长应该会引起 PPPM 的增长。”\
    \
    从上图来看,CoGo 的负增长或空增长(dCoGo ⋜ 0)对应于 PPPM 的正增长,概率为≈0.60。对于 CoGo 的小幅增长(dCoGo∈[0, 2]),可怜的是,dPPPM ⋜0,概率≈0.50,所以 BN 不反对这一假如。

    > nrow(sim[( dCoGo <= 0) & (PPPM > 0), ]) / nrow(sim[( dCoGo <= 0), ])
    [1] 0.6112532
    > nrow(sim[( dCoGo > 0) & (dCoGo < 2) & (dPPPM > 0), ]) /
    +   nrow(sim[( CoGo) > 0 & (dCoGo < 2),  ])
    [1] 0.4781784
  3. “ 如果 ANB 缩小,IMPA 就会缩小以进行弥补。”\
    \
    像以前一样通过模仿测试,咱们正在寻找与 IMPA(雷同)的负值相干的 dANB 的负值(这表明假如角度最后是正的,就会缩小)。从下图中能够看出,dANB 与 dIMPA 成正比,所以其中一个的缩小表明另一个的缩小;两者的均匀趋势(黑线)同时为负。

    
    > plot(sim)
    
    > abline(coef(lm(dIMPA ~ dANB)) 

  4. “ 如果 GoPg 强烈减少,那么 ANB 和 IMPA 都会缩小。” 如果咱们从 BN 中模仿 dGoPg、dANB 和 dIMPA,假如 dGoPg>5(即 GoPg 在减少),咱们预计 dANB>0(即 ANB 在减少)的概率为≈0.70,dIMPA<0 的概率仅为≈0.58。

    
    > nrow(sim[(dGoPg > 5) & (dANB < 0), ]) / nrow(sim[(dGoPg > 5), ])
    [1] 0.695416
    > nrow(sim[(dGoPg > 5) & (dIMPA < 0), ]) / nrow(sim[(dGoPg > 5), ])
    [1] 0.5756936
  5. *” 医治试图阻止 ANB 的缩小。如果咱们固定 ANB,医治过的病人和未医治过的病人是否有区别?”\
    首先,咱们能够查看在没有任何干涉的状况下,dANB≈0 的病人的医治和增长之间的关系(即应用咱们从数据中得悉的 BN)。*

    dist(fitted)
    table(TREATMENT = Treatment < 0.5, GOOD.GROWTH =  Growth > 0.5)

  6. 预计的 P(GOOD.GROWTH ∣ TREATMENT)对于承受医治和未承受医治的病人是不同的(≈0.65 对≈0.52)。\
    如果咱们模仿一个正式的干涉措施(如 Judea Pearl),并从内部设置 dANB=0(从而使其独立于其父母,并删除相应的弧),咱们就会发现 GOOD.GROWTH 对于承受医治和未承受医治的病人来说实际上具备雷同的散布,从而变得与 TREATMENT 无关。这表明,无利的预后的确是由避免 ANB 的变动决定的,而医治的其余成分(如果有的话)就变得不重要了。

    table(TREATMENT =  Treatment < 0.5, GOOD.GROWTH =  Growth > 0.5)

  7. *” 医治试图阻止 ANB 的缩小。如果咱们固定 ANB,医治和未医治的病人之间是否有区别?”\
    评估的办法之一是查看在放弃 GoPg 固定的状况下,A 点和 B 点之间的角度(ANB)是否在医治和未医治的病人之间发生变化。*

假如 GoPg 不发生变化,对于承受医治的病人来说,A 点和 B 点之间的角度会减少(强烈的负值示意程度不均衡,所以正的变化率示意不均衡的缩小),而对于未承受医治的病人来说则会缩小(不均衡会随着工夫缓缓好转)。

Treatment = c("UNTREATED", "TREATED")[(Treatment > 0.5) + 1L]
boxplot(dANB ~ Treatment)

模型 #2:动静贝叶斯网络

动静贝叶斯网络在预测方面的成果不如 1 号模型好,同时更加简单。这是动静贝叶斯网络所固有的,即模仿随机过程的贝叶斯网络:每个变量都与被模仿的每个工夫点的不同节点相干。(通常状况下,咱们假如过程是一阶马尔可夫,所以咱们在 BN 中有两个工夫点:t 和 t -1。)然而,咱们摸索它的目标是为了阐明这样一个 BN 能够被学习并用于 bnlearn。

咱们用于这个模型的数据是咱们在剖析开始时存储到正交的原始数据。然而,咱们抉择应用医治变量而不是成长变量作为变量来表白受试者可能正在承受医疗的事实。起因是成长变量是一个掂量第二次测量时的预后的变量,它的值在第一次测量时是未知的;而医治变量在两次测量时都是雷同的。

学习构造

首先,咱们将变量分为三组:工夫为 t2 的变量,工夫为 t1=t2- 1 的变量,以及与工夫无关的变量,因为它们在 t1 和 t1 取值雷同。


> t2.variables

而后咱们引入一个黑名单,其中。

  1. 咱们将所有从临床变量到 T1、T2 和医治的弧线列入黑名单,因为咱们晓得,年龄和医治不是由临床测量决定的。
  2. 咱们将所有进入 Treatment 和 t1 时间段的所有变量的弧列入黑名单,因为咱们假如 t1 时间段的变量之间的弧与 t2 时间段的相应变量是一样的,两次学习它们是没有意义的。
  3. 咱们将所有从 t2 到 t1 的弧列入黑名单。
grid(from = setdiff(names(ortho), c("T1", "T2")),
 to = c("T1", "T2"))

相比之下,咱们只对 T1→T2 的弧线进行白名单,因为第二次测量的年龄显然取决于第一次测量的年龄。

>  data.frame(from = c("T1"), to = c("T2"))

最初咱们能够用 bl 和 wl 来学习 BN 的构造。

> dyn.dag
 

很显著,这个 BN 比前一个更简单:它有更多的节点(16 对 9),更多的弧(27 对 19),因而有更多的参数(218 对 37)。

绘制这个新模型的最好办法是用 plot()开始。

plot(dyn, render = FALSE)

而后,咱们对变量进行分组,以不便辨别 const、t1.variables 和 t2.variables;咱们抉择从左到右而不是从上到下绘制网络。


+        attrs = list(graph = list(rankdir = "LR")))

> Graph(gR)

与前一个模型一样,医治作用于 ANB:从医治进来的惟一弧是医治→ANB2 和医治→CoA2。同样,这两个子节点都与 Down 的 A 点无关。

构造学习中的模型平均化

咱们想评估这个动静 BN 构造的稳定性,就像咱们之前对动态 BN 所做的那样,咱们能够再次做到这一点。

> boot (ortho)
> plot(dyn)

avernet(dyn.str)

 

均匀下来的 avg 和 dag 简直是一样的:它们只相差两道弧。这表明构造学习产生了一个稳固的输入。

compare(dag, avg)
tp fp fn
26  1  1

学习参数

因为 Treatment 是一个离散变量,BN 是一个 CLGBN。这意味着以 Treatment 为父节点的间断节点的参数化与其余节点不同。

fit(dynavg)

 

咱们能够看到,ANB2 取决于 ANB(所以,在前一个工夫点的同一变量)和医治。ANB 是间断的,所以它被用作 ANB2 的回归因子。医治变量是离散的,决定了线性回归的成分。

模型验证和推理

咱们能够对这个新模型提出另一组问题

  1. “ 在不同的医治下,ANB 从第一次测量到第二次测量的转变水平如何?”\
    咱们能够用 cpdist()生成一对(ANB, ANB2),条件是医治办法等于 NT、TB 和 TG,并察看其散布。

    data.frame(diff = c(nt[, 2] - nt[, 1], tb[, 2] - tb[, 1], tg[, 2] - tg[, 1]),
    
    > by(effect$diff, effect$treatment, FUN = mean)

     

    density(~ diff, groups = treatment)

    咱们晓得,医治试图阻止 ANB 的降落;这与 NT 的散布是在 TB 的右边,而 TB 是在 TG 的右边这一事实相一致。未经医治的病人病情持续好转;医治有效的病人没有真正改善,但他们的病情也没有好转;而医治无效的病人则有改善。

相比之下,这是一个未经医治的病人在雷同初始条件下的模仿轨迹。

对 CoA 的模仿轨迹是比拟事实的:它随着年龄的增长而减慢。这与 ANB 不同,它的产生是因为 CoA2 同时取决于 T1 和 T2。(ANB2 则两者都不依赖)。


> for (i in seq(nrow(interv)) {+   # 进行联结预测,目前用 predict()无奈实现。+   dist(dyn.fitted, nodes = c(),
+   intervals[i,] = weighted.mean(ANB2, weights)
+   intervals[i,] = weighted.mean(CoA2, weights)

 


对于分析师

在此对 Chang Zhang 对本文所作的奉献示意诚挚感激,她在河海大学实现了信息管理专业学位,专一数据挖掘、数据分析、自然语言解决。

若您是集体学习者或培训负责人 ,心愿学习拓端的线上 / 线下课程,欲了解更多拓端学堂课程及信息, 请点击文末“浏览原文”征询


最受欢迎的见解

1.matlab 应用贝叶斯优化的深度学习

2.matlab 贝叶斯隐马尔可夫 hmm 模型实现

3.R 语言 Gibbs 抽样的贝叶斯简略线性回归仿真

4.R 语言中的 block Gibbs 吉布斯采样贝叶斯多元线性回归

5.R 语言中的 Stan 概率编程 MCMC 采样的贝叶斯模型

6. R 语言贝叶斯 Poisson 泊松 - 正态分布模型剖析职业足球比赛进球数

7.R 语言应用贝叶斯 层次模型进行空间数据分析

8.R 语言随机搜寻变量抉择 SSVS 预计贝叶斯向量自回归(BVAR)模型

9.matlab 贝叶斯隐马尔可夫 hmm 模型实现

正文完
 0