Skip to content

Ecology Path

注意,设计模型时候应该考虑模型的 Goodness-of-Fit:A maximum-likelihood χ2 goodness-of-fit test

PLS-PM

基于(线性预测的)相关性总结因果关系图

## install.packages("plspm")

library("plspm")
data(russett)

rus_blocks = list(
    colnames(russett)[1:3],                             ## AGRIN :由3个环境因子组成的‘block’
    colnames(russett)[4:5],                             ## INDEV 
    colnames(russett)[6:length(colnames(russett))]      ## POLINS 
)

rus_path = rbind(                                       ## network's adjacent matrix
    c(0, 0, 0),
    c(0, 0, 0),
    c(1, 1, 0)
)
colnames(rus_path) = c('AGRIN','INDEV','POLINS')
rownames(rus_path) = c('AGRIN','INDEV','POLINS')

rus_modes = rep("A", 3)    ## "A", "B", "newA", "PLScore", "PLScow"

rus_pls = plspm(russett, rus_path, rus_blocks, modes = rus_modes)


summary(rus_pls)
plot(rus_pls)                                      ## plot of rus_pls$inner_model;blocks之间的关联
plot(rus_pls, what = "loadings", arr.width = 0.1)  ## plot of rus_pls$outer_model;环境因子对各自blocks的贡献/关联

piecewiseSEM

Piecewise structural equation model,一般用于 "多营养级数据的网络分析":自己定义营养级blocks(例如,土壤碳元素/氮元素/biomass是BlockA,线虫多样性/biomass是BlockB),研究blocks之间/内部的关联

## install.packages("piecewiseSEM")
library("piecewiseSEM")

data <- data.frame(                     ## 假设有 X Y 两个block
  x = runif(100),
  y1 = runif(100),
  y2 = rpois(100, 1),
  y3 = runif(100)
)

modelList <- psem(
  lm(y1 ~ x, data),                     ## blocks 之间因素的关联模型
  glm(y2 ~ x, "poisson", data),
  lm(y3 ~ y1 + y2, data),               ## blocks 内部因素的关联模型
  data
)

modelList_c <- update(modelList, y2 %~~% y1)  ## Address conflict by adding correlated errors (??)

plot(modelList,
     node_attrs = list(shape = "rectangle", color = "black",  fillcolor = "orange")
     )

summary(modelList, direction = c("y2 <- y1"))
summary(modelList_c)

参考

PLS-PM https://zhuanlan.zhihu.com/p/675497368
piecewiseSEM https://soilecology.njau.edu.cn/info/1016/1595.htm
piecewiseSEM https://www.rdocumentation.org/search?q=piecewiseSEM