如何在R2BayesX模型中绘制疾病空间效应映射图?
R语言绘制空间效应95%后验可信区间映射图方案
实现步骤与代码示例
要生成你描述的映射图,需先通过贝叶斯空间模型得到区域空间效应的后验分布,再根据95%可信区间是否包含0判断显著性,最后用空间可视化工具绘图。以下是完整可复用的代码流程:
1. 依赖包加载与数据准备
确保你有带空间多边形的sf格式地图数据,以及包含响应变量、协变量的数据集,两者通过region_id关联:
library(INLA) library(sf) library(ggplot2) library(dplyr) # 合并空间数据与模型数据(替换成你的实际数据对象) merged_data <- your_shapefile %>% left_join(your_model_data, by = "region_id")
2. 拟合贝叶斯空间模型
使用INLA包(疾病映射领域常用工具)拟合包含各类协变量的模型,其中空间效应采用BYM模型:
# 构建空间邻接矩阵 adj_matrix <- inla.read.graph(st_neighbors(merged_data)) # 拟合模型(根据你的响应变量类型调整family参数) model <- inla( y ~ x1 + x2 + # 分类协变量 f(x3, model = "spline") + f(x4, model = "spline") + # 非线性度量协变量 f(region_id, model = "bym", graph = adj_matrix), # 空间效应 data = merged_data, family = "poisson" # 可选:gaussian、binomial等 )
3. 提取后验结果并分组
从模型输出中提取空间效应的后验均值、95%可信区间,然后按显著性和效应方向分组:
# 提取空间效应的后验统计量 spatial_effects <- model$summary.random$region_id %>% select(region_id = ID, mean = mean, lower = `0.025quant`, upper = `0.975quant`) # 合并回空间数据并定义分组 merged_data <- merged_data %>% left_join(spatial_effects, by = "region_id") %>% mutate( effect_category = case_when( lower > 0 ~ "正效应(显著)", upper < 0 ~ "负效应(显著)", TRUE ~ "效应不显著" ) )
4. 绘制空间映射图
用ggplot2+sf绘制符合要求的彩色映射图:
# 定义颜色方案 color_map <- c( "正效应(显著)" = "red", "负效应(显著)" = "green", "效应不显著" = "gray" ) # 生成图形 ggplot() + geom_sf(data = merged_data, aes(fill = effect_category), color = "white", size = 0.1) + scale_fill_manual(values = color_map) + labs(title = "空间效应95%后验可信区间映射", fill = "效应类型") + theme_minimal() + theme(plot.title = element_text(hjust = 0.5), legend.position = "right")
关键注意事项
- 模型族选择:如果是疾病计数数据用
poisson或nbinomial;连续型响应变量用gaussian。 - 非线性效应:除样条模型外,也可使用
rw2(二阶随机游走)等,根据数据特征调整。 - 空间模型:BYM模型是疾病映射的标准选择,若需简化可改用
car模型。 - 数据匹配:务必保证空间数据与模型数据的
region_id完全一致,避免数据丢失。
内容的提问来源于stack exchange,提问作者Sofonias Derso
相关产品推荐
相关产品推荐

