美文网首页网络分析
网络数据统计分析笔记|| 网络图上的过程建模与预测

网络数据统计分析笔记|| 网络图上的过程建模与预测

作者: 周运来就是我 | 来源:发表于2020-10-02 09:21 被阅读0次

    前情回顾:

    Gephi网络图极简教程
    Network在单细胞转录组数据分析中的应用
    网络数据统计分析笔记|| 为什么研究网络
    网络数据统计分析笔记|| 操作网络数据
    网络数据统计分析笔记|| 网络数据可视化
    网络数据统计分析笔记|| 网络数据的描述性分析
    网络数据统计分析笔记||网络图的数学模型
    网络数据统计分析笔记|| 网络图的统计模型
    网络数据统计分析笔记|| 网络拓扑结构推断

    到目前为止,我们在本书中看到了大量网络图的例子。出于不同的目的,网络图对所研究的系统元素之间的交互进行了表征。然而,我们最终感兴趣的经常是和每个元素相关的某些量(或者属性)。这种情况下,一种通常合理的观点是:元素之间的交互作用是影响这个量的重要途径。例如,人群的互动深深影响着他们的行为和观点;在DNA序列信息方面更为相似的蛋白质,往往在细胞中具有相同或者相似的功能。与这种现象相关的量可以被有效地看作是定义在网络图上的随机过程。更正式地说,它们可以表示为以网络图G(V,E)为索引的随机变量的集合X,对于包含于V的i有(Xi),或者在t时间内离散或者连续变化时记为Xi(t)。

    我们将Xi称为静态过程(static processes),Xi(t)为动态过程(dynamic pro-cesses)。当采用恰当的度量时,这类过程研究中的统计问题包括建模和模型参数的推断以及尤为重要的预测。

    关于网络图定义的静态过程的预测。我们从简单的最近邻预测(Nearest neighborsNearest-neighbor prediction)开始,然后过渡到更复杂的基于模型的方法,这些方法根据给定的网络图结构描述顶点属性。具体来说,我们对马尔可夫随机场模型进行了详细的研究,重点是模型参数的估计和基于采样的预测。最后,我们用基于核的图形回归来总结,并给出从网络图的拓扑推导出的核的例子,以捕获顶点属性之间的相似性。


    最邻近方法

    考虑一个节点的属性的集合,其向量形式为Xi。这一属性可能与时间独立,或者是动态过程的一个快照。在之前的章节中,这类属性被用于对网络图G中的边存在与否进行建模和预测。也即是以X为条件,对变量Yij的情况进行了建模。而在某些情况下,我们感兴趣的反而是以Yij为条件时X的表现如何。

    我们通过蛋白质功能预测问题进行说明。

    set.seed(42)
    library(sand)
    data(ppi.CC)
    
    # CHUNK 2
    summary(ppi.CC)
    IGRAPH 3e8c8b7 UN-- 134 241 -- 
    + attr: name (v/c), ICSC (v/n), IPR000198 (v/n), IPR000403 (v/n), IPR001806 (v/n), IPR001849 (v/n), IPR002041 (v/n),
    | IPR003527 (v/n)
    > ppi.CC
    IGRAPH 3e8c8b7 UN-- 134 241 -- 
    + attr: name (v/c), ICSC (v/n), IPR000198 (v/n), IPR000403 (v/n), IPR001806 (v/n), IPR001849 (v/n), IPR002041 (v/n),
    | IPR003527 (v/n)
    + edges from 3e8c8b7 (vertex names):
     [1] YGR198W--YLR305C YGR152C--YLR229C YDL047W--YLR248W YDR099W--YER177W YDR099W--YNL267W YDR099W--YGL252C YAL041W--YER114C
     [8] YJL005W--YNL138W YDL047W--YER155C YDL047W--YLR310C YDR477W--YER027C YDR477W--YDR422C YDR477W--YGL208W YPL203W--YIL033C
    [15] YDL047W--YMR028W YPL203W--YJL164C YIL033C--YJL164C YJL128C--YNR031C YNL098C--YOR101W YNR031C--YJL157C YNL098C--YBR140C
    [22] YER027C--YGL208W YHR030C--YJL095W YHR030C--YPL140C YLR229C--YPL161C YGR040W--YLR362W YGR040W--YDL159W YGR040W--YPL115C
    [29] YJL095W--YPL140C YPL140C--YBR260C YPL140C--YEL060C YHR030C--YIL113W YNL138W--YIL113W YNR031C--YLR006C YLR006C--YCR073C
    [36] YER177W--YER114C YER177W--YDR006C YER177W--YDR216W YDR477W--YML006C YDR477W--YEL060C YOR212W--YHR005C YHR005C--YER020W
    [43] YJL128C--YDL006W YDL135C--YKR055W YLR362W--YCL032W YOR212W--YJR086W YJR102C--YLR417W YJR102C--YPL002C YOR101W--YDR264C
    + ... omitted several edges
    

    数据集ppi.CC中包含了134中蛋白质的241项相互作用以及各种节点的属性。这些蛋白质数据适用于Saccharomyces 面包酵母,并在GO数据库中标注为细胞通讯(cell communication),在数据中为属性ICSC(细胞信号联级,intracellular signaling cascade),该术语描述一种特殊的细胞通信。

    V(ppi.CC)$ICSC[1:10]
    # ---
    ##  [1] 1 1 1 1 1 0 1 1 1 1
    # ---
    
    V(ppi.CC)[ICSC == 1]$color <- "yellow"
    V(ppi.CC)[ICSC == 0]$color <- "blue"
    plot(ppi.CC, vertex.size=5, vertex.label=NA)
    

    黄色表示节点参与细胞信号联级,蓝色表示未参与。我们看到大部分的同颜色的点在一起,这表明在该网络图中根据局部信息进行信息预测ICSC是可行的。最邻近方法是用于生成局部预测的一种简单有效的方法。

    比较熟知的是邻近算法,或者说K最近邻(kNN,k-Nearest Neighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 kNN方法在类别决策时,只与极少量的相邻样本有关。由于kNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,kNN方法较其他方法更为适合(来自百度百科)

    最近邻算法通过计算预测点与测试样例点数据的距离,找出待测数据与测试数据的最小距离点,并返回该测试点的类型,从而确定预测数据类型的算法。所以他的核心是距离的度量方式(如何定义Neighbor)。

    为了理解最邻近方法在预测酵母数据集ICSC功能方面的效果,我们可以计算网络巨型组件中每个蛋白的最邻近平均,以利用蛋白质互作的信息。

    clu <- components(ppi.CC)
    ppi.CC.gc <- induced_subgraph(ppi.CC, 
    +    clu$membership==which.max(clu$csize))
    nn.ave <- sapply(V(ppi.CC.gc),
    +    function(x) mean(V(ppi.CC.gc)[nei(x)]$ICSC))
    clu
    $membership
    YGR198W YLR305C YGR152C YLR229C YDL047W YLR248W YDR099W YER177W YNL267W YGL252C YAL041W YER114C YJL005W YNL138W YER155C YLR310C 
          1       1       1       1       1       1       1       1       1       1       1       1       1       1       1       1 
    YDR477W YER027C YDR422C YGL208W YPL203W YIL033C YMR028W YJL164C YJL128C YNR031C YNL098C YOR101W YJL157C YBR140C YHR030C YJL095W 
          1       1       1       1       1       1       1       1       1       1       1       1       1       1       1       1 
    YPL140C YPL161C YGR040W YLR362W YDL159W YPL115C YBR260C YEL060C YIL113W YLR006C YCR073C YDR006C YDR216W YML006C YOR212W YHR005C 
          1       1       1       1       1       1       1       1       1       1       1       1       1       1       1       1 
    YER020W YDL006W YDL135C YKR055W YCL032W YJR086W YJR102C YLR417W YPL002C YDR264C YPR165W YOR047C YDR103W YBL016W YOR057W YNL298W 
          1       1       1       1       1       1       1       1       1       1       1       1       1       1       1       1 
    YDR373W YDL035C YPL268W YHR186C YJR066W YNL006W YKL203C YER149C YLL021W YBL105C YMR140W YHL007C YFR034C YDL106C YHR079C YER089C 
          1       1       1       1       1       1       1       1       1       1       1       1       1       1       2       2 
    YOR208W YER075C YHR061C YDR309C YLR452C YOR371C YAL056W YOR134W YDR389W YER118C YDR168W YDL235C YIL147C YOR107W YNL271C YLL017W 
          1       1       1       1       1       1       1       1       1       1       1       1       1       1       1       1 
    YOR231W YLR319C YBL085W YOR127W YDR379W YDL240W YFL047W YGL121C YDR277C YDL138W YDL194W YNL090W YIL118W YNL180C YPL089C YLR313C 
          1       1       1       1       1       1       1       1       1       1       1       1       1       1       1       1 
    YIL047C YPR040W YOR008C YLR371W YGR014W YOL067C YBL103C YJL080C YBR093C YNL076W YIL002C YKR019C YJL083W YKL178C YDR085C YLL016W 
          1       1       1       1       1       3       3       1       1       1       4       4       4       1       1       1 
    YNL027W YBL056W YLR240W YDR490C YNL106C YPR075C 
          1       1       1       1       1       1 
    
    $csize
    [1] 127   2   2   3
    
    $no
    [1] 4
    
    ppi.CC.gc
    IGRAPH f03a63b UN-- 127 237 -- 
    + attr: name (v/c), ICSC (v/n), IPR000198 (v/n), IPR000403 (v/n), IPR001806 (v/n), IPR001849 (v/n), IPR002041 (v/n),
    | IPR003527 (v/n), color (v/c)
    + edges from f03a63b (vertex names):
     [1] YGR198W--YLR305C YGR152C--YLR229C YDL047W--YLR248W YDR099W--YER177W YDR099W--YNL267W YDR099W--YGL252C YAL041W--YER114C
     [8] YJL005W--YNL138W YDL047W--YER155C YDL047W--YLR310C YDR477W--YER027C YDR477W--YDR422C YDR477W--YGL208W YPL203W--YIL033C
    [15] YDL047W--YMR028W YPL203W--YJL164C YIL033C--YJL164C YJL128C--YNR031C YNL098C--YOR101W YNR031C--YJL157C YNL098C--YBR140C
    [22] YER027C--YGL208W YHR030C--YJL095W YHR030C--YPL140C YLR229C--YPL161C YGR040W--YLR362W YGR040W--YDL159W YGR040W--YPL115C
    [29] YJL095W--YPL140C YPL140C--YBR260C YPL140C--YEL060C YHR030C--YIL113W YNL138W--YIL113W YNR031C--YLR006C YLR006C--YCR073C
    [36] YER177W--YER114C YER177W--YDR006C YER177W--YDR216W YDR477W--YML006C YDR477W--YEL060C YOR212W--YHR005C YHR005C--YER020W
    [43] YJL128C--YDL006W YDL135C--YKR055W YLR362W--YCL032W YOR212W--YJR086W YJR102C--YLR417W YJR102C--YPL002C YOR101W--YDR264C
    + ... omitted several edges
    
    

    之后,我们对结果根据节点的状态分别做直方图。被考虑邻居的节点为自我ego节点。

    par(mfrow=c(2,1))
    hist(nn.ave[V(ppi.CC.gc)$ICSC == 1], col="yellow",
       ylim=c(0, 30), xlab="Proportion Neighbors w/ ICSC",
       main="Egos w/ ICSC")
    hist(nn.ave[V(ppi.CC.gc)$ICSC == 0], col="blue",
       ylim=c(0, 30), xlab="Proportion Neighbors w/ ICSC",
       main="Egos w/out ICSC")
    

    证实了ICSC可以被一定准确地预测。

    nn.pred <- as.numeric(nn.ave > 0.5)
    mean(as.numeric(nn.pred != V(ppi.CC.gc)$ICSC))
    [1] 0.2598425
    
    

    采用0.5作为预测阈值,错误率为25% 。

    下面我们从GO数据库中提取ICSC信息,以评估我们预测的结果 。

    # if (!requireNamespace("BiocManager", quietly = TRUE))
    #    install.packages("BiocManager")
    #BiocManager::install(update = FALSE)
    #BiocManager::install(c("GOstats","GO.db"), update = FALSE)
    library(GOstats)
    library(GO.db)
    
    # CHUNK 9
    # BiocManager::install("org.Sc.sgd.db", update = FALSE)
    library(org.Sc.sgd.db)
    
    # CHUNK 10
    x <- as.list(org.Sc.sgdGO2ALLORFS)
    
    x$`GO:0000001`
          IMP       IGI       IMP       IPI       IMP       IMP       IGI       IMP       IGI       TAS 
    "YAL048C" "YAL048C" "YDL006W" "YDL029W" "YDL029W" "YDL239C" "YDL239C" "YDR150W" "YDR150W" "YFL039C" 
          IMP       IMP       IMP       IEA       IMP       IMP       IPI       TAS       TAS       TAS 
    "YGL055W" "YGR132C" "YGR231C" "YHR194W" "YHR194W" "YIL062C" "YIL062C" "YIL138C" "YJR065C" "YKL013C" 
          IGI       IGI       IMP       TAS       IMP       IMP       IGI       TAS       IMP       IDA 
    "YLL001W" "YLR190W" "YLR190W" "YLR370C" "YML104C" "YMR072W" "YMR275C" "YNL079C" "YNL304W" "YNL304W" 
          IGI       TAS       IMP       IMP       IGI       IMP       IEA       IGI       IMP       IPI 
    "YNL304W" "YNR035C" "YOL009C" "YOL076W" "YOL076W" "YOR147W" "YOR147W" "YOR326W" "YOR326W" "YOR326W" 
          IMP       IGI       IMP 
    "YPR083W" "YPR131C" "YPR131C" 
    > length(names(x))
    [1] 8567
    
    current.icst <- x[names(x) == "GO:0035556"]
    
    length(current.icst$`GO:0035556`)
    [1] 357
    
    ev.code <- names(current.icst[[1]])
    icst.ida <- current.icst[[1]][ev.code == "IDA"]
    icst.ida
          IDA       IDA       IDA       IDA       IDA       IDA       IDA       IDA       IDA       IDA 
    "YBR276C" "YDL006W" "YDL159W" "YDL235C" "YER089C" "YHL007C" "YIL033C" "YIL147C" "YJL085W" "YLR006C" 
          IDA       IDA       IDA       IDA       IDA       IDA       IDA 
    "YLR310C" "YLR362W" "YML121W" "YNL053W" "YOR101W" "YPR095C" "YPR165W" 
    
    length(icst.ida)
    [1] 17
    
    
     orig.icsc <- V(ppi.CC.gc)[ICSC == 1]$name
    
     candidates <- intersect(icst.ida, V(ppi.CC.gc)$name)
    
     new.icsc <- setdiff(candidates, orig.icsc)
    new.icsc
    [1] "YDL159W" "YDL235C" "YHL007C" "YIL033C" "YIL147C" "YLR006C" "YLR362W"
    
    nn.ave[V(ppi.CC.gc)$name %in% new.icsc] > 0.5
    YIL033C YLR362W YDL159W YLR006C YHL007C YDL235C YIL147C 
       TRUE   FALSE   FALSE    TRUE    TRUE   FALSE   FALSE 
    
    马尔科夫随机场

    纯粹的马尔科夫模型就是指一件事物的当前状态只与它之前的1个或者n个状态有关,而与再之前的状态没有关系,比如今天天气好坏只与昨天天气有关,而与前天乃至大前天都没有关系。符合这样的一种特性的事物认为其具有马尔科夫性。马尔科夫随机过程是随机过程的一种,其原始模型为马尔科夫链,由俄国数学家马尔科夫于1907年提出。其主要特征是:在已知眼下状态(如今)的条件下,它未来的变化(将来)不依赖于以往的变化,而只跟眼下所处的状态有关。随机场实际上是一种特殊的随机过程,跟普通的随机过程不同的是,其參数取值不再是实数值而有是多维的矢量值甚至是流行空间的点集。一些已有的随机场如:马尔科夫随机场MRF。吉布斯随机场GRF。条件随机场CRF,高斯随机场。马尔科夫随机场是具有马尔科夫特性的随机场。

    library(ngspatial)
    
    
    X <- V(ppi.CC.gc)$ICSC
    A <- as_adjacency_matrix(ppi.CC.gc, sparse=FALSE)
    
    # CHUNK 17
    formula1 <- X~1
    
    
    gene.motifs <- cbind(V(ppi.CC.gc)$IPR000198,
                          V(ppi.CC.gc)$IPR000403,
                          V(ppi.CC.gc)$IPR001806,
                          V(ppi.CC.gc)$IPR001849,
                          V(ppi.CC.gc)$IPR002041,
                          V(ppi.CC.gc)$IPR003527)
    formula2 <- X ~ gene.motifs
    
    
    m1.mrf <- autologistic(formula1, A=A,
       control=list(confint="none"))
    
    
    m1.mrf$coefficients
    # ---
    ## (Intercept)         eta
    ##   0.2004949   1.1351942
    # ---
    

    错误率大概20%

     mrf1.pred <- as.numeric((m1.mrf$fitted.values > 0.5))
    
    > mean(as.numeric(mrf1.pred != V(ppi.CC.gc)$ICSC))
    [1] 0.2047244
    
    m1.mrf$fitted.values[V(ppi.CC.gc)$name %in% new.icsc]
    [1] 0.7519142 0.1658647 0.2184092 0.6451897 0.9590030 0.2595863 0.3956048
    

    在模型中纳入motifs信息

    m2.mrf <- autologistic(formula2, A=A,
       control=list(confint="none"))
    m2.mrf$coefficients
     (Intercept)  gene.motifs1  gene.motifs2  gene.motifs3  gene.motifs4  gene.motifs5  gene.motifs6 
     5.081573e-02  1.876848e+00  1.875217e+01  1.875217e+01  1.824990e+01  8.487244e-08 -1.837997e+01 
              eta 
     1.297921e+00 
    
     mrf.pred2 <- as.numeric((m2.mrf$fitted.values > 0.5))
     mean(as.numeric(mrf.pred2 != V(ppi.CC.gc)$ICSC))
    [1] 0.1889764
    

    错误率为 0.1889764。

    m2.mrf$fitted.values[V(ppi.CC.gc)$name %in% new.icsc]
    [1] 0.7829254 0.4715219 0.4962188 0.6570828 0.7829254 0.2175373 0.3510037
    

    拟合优度

    set.seed(42)       # random seed for rautologistic
    ntrials <- 100
    a1.mrf <- numeric(ntrials)
    a2.mrf <- numeric(ntrials)
    Z1 <- rep(1,length(X))
    Z2 <- cbind(Z1, gene.motifs)
    for(i in 1:ntrials){
       X1.mrf <- rautologistic(as.matrix(Z1), A=A,
                               theta=m1.mrf$coefficients)
       X2.mrf<- rautologistic(as.matrix(Z2), A=A,
                               theta=m2.mrf$coefficients)
       a1.mrf[i] <- assortativity(ppi.CC.gc, X1.mrf+1,
                                   directed=FALSE)
       a2.mrf[i] <- assortativity(ppi.CC.gc, X2.mrf+1,
                                   directed=FALSE)
    }
    
    

    原始同配系数

    assortativity(ppi.CC.gc, X+1, directed=FALSE)
    [1] 0.3739348
    
    summary(a1.mrf)
    # ---
    ##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    ## 0.06736 0.22324 0.28733 0.27485 0.34203 0.46534 
    # ---
    summary(a2.mrf)
    # ---
    ##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
    ## -0.02656  0.20478  0.27621  0.26621  0.32519  0.45848
    # ---
    
    核方法

    在低维空间中不能线性分割的点集,通过转化为高维空间中的点集时,从而变为线性可分的。然而,如果直接把低维度的数据转化到高维度的空间中,然后再去寻找线性分割平面,会遇到两个大问题,一是由于是在高维度空间中计算,导致维度祸根(curse of dimension)问题;二是非常的麻烦,每一个点都必须先转换到高维度空间,然后求取分割平面的参数等等;怎么解决这些问题?答案是通过核戏法(kernel trick)。核方法可以有效地将传统回归范式拓展到各种非传统数据的场景。

    Mercer 定理:任何半正定的函数都可以作为核函数。所谓半正定的函数f(xi,xj),是指拥有训练数据集合(x1,x2,...xn),我们定义一个矩阵的元素aij = f(xi,xj),这个矩阵式n*n的,如果这个矩阵是半正定的,那么f(xi,xj)就称为半正定的函数。这个mercer定理不是核函数必要条件,只是一个充分条件,即还有不满足mercer定理的函数也可以是核函数。



    par(mfrow=c(1,1))
    L <- as.matrix(laplacian_matrix(ppi.CC.gc))
    e.L <- eigen(L)
    nv <- vcount(ppi.CC.gc)
    e.vals <- e.L$values[1:(nv-1)]
    f.e.vals <- c((e.vals)^(-1), 0)
    plot(f.e.vals, col="magenta", xlim=c(1, nv),
       xlab=c("Index i"), ylab=expression(f(gamma[i])))
    
    par(mfrow=c(1,3))
    e.vec <- e.L$vectors[, (nv-1)]
    v.colors <- character(nv)
    v.colors[e.vec >= 0] <- "red"
    v.colors[e.vec < 0] <- "blue"
    v.size <- 15 * sqrt(abs(e.vec))
    l <- layout_with_fr(ppi.CC.gc)
    plot(ppi.CC.gc, layout=l, vertex.color=v.colors,
       vertex.size=v.size, vertex.label=NA)
    
    e.vec <- e.L$vectors[, (nv-2)]
    v.colors <- character(nv)
    v.colors[e.vec >= 0] <- "red"
    v.colors[e.vec < 0] <- "blue"
    v.size <- 15 * sqrt(abs(e.vec))
    l <- layout_with_fr(ppi.CC.gc)
    plot(ppi.CC.gc, layout=l, vertex.color=v.colors,
         vertex.size=v.size, vertex.label=NA)
    
    e.vec <- e.L$vectors[, (nv-2)]
    v.colors <- character(nv)
    v.colors[e.vec >= 0] <- "red"
    v.colors[e.vec < 0] <- "blue"
    v.size <- 15 * sqrt(abs(e.vec))
    l <- layout_with_fr(ppi.CC.gc)
    plot(ppi.CC.gc, layout=l, vertex.color=v.colors,
         vertex.size=v.size, vertex.label=NA)
    
    
    
    library(kernlab)
    
    # CHUNK 34
    K1.tmp <- e.L$vectors %*% diag(f.e.vals) %*%
       t(e.L$vectors)
    K1 <- as.kernelMatrix(K1.tmp)
    
    # CHUNK 35
    K.motifs <- gene.motifs %*% t(gene.motifs)
    
    # CHUNK 36
    K2.tmp <- 0.5 * K1.tmp + 0.5 * K.motifs
    K2 <- as.kernelMatrix(K2.tmp)
    
    m1.svm <- ksvm(K1, X, type="C-svc")
    m1.svm.fitted <- fitted(m1.svm)
    
    # CHUNK 38
    mean(as.numeric(m1.svm.fitted != V(ppi.CC.gc)$ICSC))
    [1] 0.1102362
    

    错误率为0.11,减少一半(之前为0.20)

     m1.svm.fitted[V(ppi.CC.gc)$name %in% new.icsc]
    [1] 1 1 1 0 1 0 0
    
    动态过程的建模与预测

    之前我们讨论的建模与预测都是在静态图上进行的,如何在动态图上进行呢?我们考虑传染病过程进行示例。在图中,每个图都是某时刻群体的接触结构,在t=0的时候一个人感染(0号病人),随着时间的推进,不断有人感染。同时考虑过一段时间后,有人康复。所以在图中人有感染,移除,未感染三种状态。

    set.seed(42)
    gl <- list()
    gl$ba <- sample_pa(250, m=5, directed=FALSE)
    gl$er <- sample_gnm(250, 1250)
    gl$ws <- sample_smallworld(1, 250, 5, 0.01)
    
    # CHUNK 44
    beta <- 0.5
    gamma <- 1
    
    # CHUNK 45
    ntrials <- 100
    
    # CHUNK 46
    sim <- lapply(gl, sir, beta=beta, gamma=gamma,
       no.sim=ntrials)
    
    # CHUNK 47
    plot(sim$er)
    plot(sim$ba, color="palegoldenrod",
       median_color="gold", quantile_color="gold")
    plot(sim$ws, color="pink", median_color="red",
       quantile_color="red")
    
    x.max <- max(sapply(sapply(sim, time_bins), max))
    y.max <- 1.05 * max(sapply(sapply(sim, function(x)
       median(x)[["NI"]]), max, na.rm=TRUE))
    
    plot(time_bins(sim$er), median(sim$er)[["NI"]],
       type="l", lwd=2, col="blue", xlim=c(0, x.max),
       ylim=c(0, y.max), xlab="Time",
       ylab=expression(N[I](t)))
    lines(time_bins(sim$ba), median(sim$ba)[["NI"]],
       lwd=2, col="gold")
    lines(time_bins(sim$ws), median(sim$ws)[["NI"]],
       lwd=2, col="red")
    legend("topright", c("ER", "BA", "WS"),
       col=c("blue", "gold", "red"), lty=1)
    

    http://www2.ece.rochester.edu/~gmateosb/ECE442/slides.html
    https://www.cnblogs.com/raorao1994/p/8760591.html
    https://blog.csdn.net/hohaizx/article/details/82868843
    https://blog.csdn.net/lucygill/article/details/79734874
    https://www.zdaiot.com/MachineLearning/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/%E9%A9%AC%E5%B0%94%E7%A7%91%E5%A4%AB%E9%9A%8F%E6%9C%BA%E5%9C%BA(MRF)/
    https://oldpan.me/archives/markov-random-field-deeplearning
    https://blog.csdn.net/on2way/article/details/47307927
    马尔科夫随机场的基本概念
    http://www.ee.columbia.edu/~cylin/course/netsci-10/NetSci-Fall2010-Lecture10.pdf
    https://www.cnblogs.com/hichens/p/11874645.html
    https://www.cnblogs.com/vivounicorn/archive/2010/12/13/1904720.html

    相关文章

      网友评论

        本文标题:网络数据统计分析笔记|| 网络图上的过程建模与预测

        本文链接:https://www.haomeiwen.com/subject/ekfuyktx.html