R :偏最小二乘路径分析

发布时间 2024-01-09 16:00:52作者: 王哲MGG_AI

学习的源头:

https://mp.weixin.qq.com/s/LeI78lGlQzqB5f1qlCdLmw

#安装 plspm 包
#install.packages('devtools')
#devtools::install_github('gastonstat/plspm')

rm(list=ls()) #清除R环境中的所有对象
library(plspm) #加载 plspm 包
setwd("C:\\Users\\Administrator\\Desktop\\210314-plspm包的偏最小二乘路径分析-一个环境-生物群落的潜变量结构方程示例") #设置工作目录
#读取数据
dat <- read.delim('environment_community.txt', sep = '\t')  #读取数据并将其存储在变量里


#指定潜变量,在 R 中以列表(list)存储变量和潜变量的关系
#组织和分类 dat 数据框中的变量
dat_blocks <- list(
  space = c('longitude', 'latitude', 'altitude'), 
  climate = c('Temp', 'PET', 'AI'), 
  soil = c('pH', 'OC', 'TN'), 
  community = 'species_richness', 
  EMF = 'EMF'
)
dat_blocks

#通过 0-1 矩阵描述潜变量之间的关联,其中 0 代表变量间没有关联,1 代表有关联
space <- c(0, 0, 0, 0, 0)
climate <- c(1, 0, 0, 0, 0)
soil <- c(1, 1, 0, 0, 0)
community <- c(1, 1, 1, 0, 0)
EMF <- c(1, 1, 1, 1, 0)
dat_path <- rbind(space, climate, soil, community, EMF) #创建矩阵
colnames(dat_path) <- rownames(dat_path) #设置矩阵的列名和行名
dat_path #打印

#指定因果关系,可选 A(代表列是行的因) 或 B(代表行是列的因)
dat_modes <- rep('A', 5)
dat_modes
#模式 'A':这通常代表反映型(reflective)模型,意味着观测变量是由潜变量引起的。换句话说,潜变量导致了观测变量的变化。
#模式 'B':代表形成型(formative)模型,这种情况下观测变量导致潜变量的变化。
#这意味着对于 space、climate、soil、community 和 EMF 这些潜变量,它们的观测变量被认为是由这些潜变量引起的。

##一个简单的 PLS-PM,更多参数详情 ?plspm
dat_pls <- plspm(dat, dat_path, dat_blocks, modes = dat_modes)
dat_pls
summary(dat_pls)

# 将PLS-PM模型的结果摘要输出保存到文本文件
capture.output(dat_pls, file = "dat_pls_output.txt")

# 开始捕获详细结果输出
sink("dat_pls_detailed_output.txt")
# 打印详细的模型结果
print(summary(dat_pls))
# 停止捕获输出
sink()

#结果内容比较多,细节部分还需自行参阅 plspm 包的用户手册:
#完整版手册,235页:https://www.gastonsanchez.com/PLS_Path_Modeling_with_R.pdf
#简版手册,10页:https://rdrr.io/cran/plspm/f/inst/doc/plspm_introduction.pdf

#以下仅展示了一部分相对重要的内容

#查看路径系数的参数估计值,以及相关的统计信息
dat_pls$path_coefs
dat_pls$inner_model

#创建因果关系的路径图,红色是正相关,蓝色是负相关
innerplot(dat_pls, colpos = 'red', colneg = 'blue', show.values = TRUE, lcol = 'gray', box.lwd = 0)

#查看作为外源潜变量和内源潜变量的状态
dat_pls$inner_summary

#查看变量间的影响状态
dat_pls$effects

#查看观测变量和潜变量关系,可通过 outerplot() 画图展示类似路径图的结构
dat_pls$outer_model
#载荷的可视化
outerplot(dat_pls, what = 'loadings', arr.width = 0.1, colpos = 'red', colneg = 'blue', show.values = TRUE, lcol = 'gray')
#权重的可视化
outerplot(dat_pls, what = 'weights', arr.width = 0.1, colpos = 'red', colneg = 'blue', show.values = TRUE, lcol = 'gray')


#goodness-of-fit 值可以帮助评估模型优度
dat_pls$gof

#查看潜变量得分,可以理解为标准化后的潜变量的值
dat_pls$scores

#输出潜变量的值
#latent <- data.frame(dat_pls$scores)
#latent <- cbind(dat$site, latent)
#write.csv(latent, 'latent.csv')