R语言广义可加模型在空气环境污染方面的应用(1)

news2024/9/21 22:20:47

粉丝私信我希望复制一篇文章的图片,图片来源于文章:Wu C, Yan Y, Chen X, Gong J, Guo Y, Zhao Y, Yang N, Dai J, Zhang F, Xiang H. Short-term exposure to ambient air pollution and type 2 diabetes mortality: A population-based time series study. Environ Pollut. 2021 Nov 15;289:117886. doi: 10.1016/j.envpol.2021.117886. Epub 2021 Jul 31. PMID: 34371265.
在这里插入图片描述
文章有3个图片,是一个关于空气污染和糖尿病发病率的图片,图形如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
文章内容比较多,我打算通过两节内容来演示,今天我们来演示一下文章1-2的图片生成,我这里没有环境污染和糖尿病的数据,使用的既往的美国芝加哥1987年至 2000年大气污染与死亡数据(公众号回复:芝加哥2,可以获得数据)做实例分析,我们先导入需要的R包和数据看看

library(tsModel)
library(ggplot2)
library(nlme)
library(mgcv)
bc<-read.csv("E:/r/test/chicago.csv",sep=',',header=TRUE)

在这里插入图片描述
我们先来看看数据的构成,death:死亡人数 (per day),pm10:大气污染物pm10的中位数值,pm25median,o3median:二氧化硫的中位数值,time:天数,这里就是我们的时间,tmpd:华氏温度,date:日期
在文章中,作者在图1分析了多个指标和糖尿病的关联,我这里先绘制这个时间相关的折线图
在这里插入图片描述
先把日期变量转换一下格式

bc$date<-as.Date(bc$date)

我们先绘制一个pm10的图作者是以间隔1年为坐标,我这里数据年份多一点,这里以2年为间隔

ggplot(bc, aes(x =date, y = pm10,color="red"))+
  geom_line(size=1)+
  scale_x_date(date_labels = "%Y",date_breaks = "2 year")+
  xlab("Year")+ 
  ylab("pm10")+
  theme_bw()+
  theme( axis.title=element_text(size=10,face="plain",color="black"),
         axis.text = element_text(size=10,face="plain",color="black"),
         legend.position = c(0.8,0.8),
         legend.background = element_blank())

在这里插入图片描述
这样单变量的时间折线图就绘制好了,多个变量就把它组合起来,先把长数据转成宽数据,这里收集了"pm10",“o3”,"rhum"这3个指标rhum我也不知道是什么,

library(reshape2)
dat<-melt(bc,id=c("date","time"),measure.vars = (c("pm10","o3","rhum")),
             variable.name = "measure",value.name = "value")

在这里插入图片描述
转换好以后就可以绘图了

ggplot(dat, aes(x =date, y = value,color="red"))+
  geom_line(aes(group=measure,col=measure),size=1)+
  scale_x_date(date_labels = "%Y",date_breaks = "2 year")+
  facet_wrap(~measure)+
  xlab("Year")+ 
  ylab("pm10")+
  theme_bw()+
  theme( axis.title=element_text(size=10,face="plain",color="black"),
         axis.text = element_text(size=10,face="plain",color="black"),
         legend.position = c(0.8,0.8),
         legend.background = element_blank())

在这里插入图片描述
稍微调整一下就生成好图片了
在这里插入图片描述
这样时间相关折线图就绘制好了,接下来作者图2绘制了一个在不同年龄分层分析中,T2DM死亡率与污染物浓度增加10μg/m 3相关的95%CI变化百分比(%),
在这里插入图片描述
这其实就是个带误差和可信区间的折线图,数据是以年龄来分层,我这里没有分层变量,我自己生成一个fage变量,0表示低龄,1表示高龄

set.seed(1234)
bc$fage<-sample(0:1,size=5114,replace=TRUE)
bc$fage<-as.factor(bc$fage)

在文章中
我们先来生成一个pm10lag01变量,赋值为过去两天大气PM10浓度的移动均值,表示图中的lag01

pm10lag<-runMean(bc.f$pm10,0:i)###产生 pm10lag01变量,赋值为过去两天大气PM10浓度的移动均值

搞好变量后就可以建立模型了,文章中作者已经给出它的模型,以及模型的详细解释,我这里就直接上代码了,dow这里是星期几,作者转成了一个分类变量,就是周末和非周末,我这里就不弄了
在这里插入图片描述

fit1<-gam(death~pm10lag01+ns(temp,3)+ns(o3,3)+ns(date,7*14),family = quasipoisson(),
          data=bc) #GAM 模型拟合 
summary(fit1)

在这里插入图片描述
这部分的操作我在既往文章《R语言mgcv包时间序列分析在空气污染与健康领域的应用(1)》有介绍,有兴趣的可以自己看一下,我这里直接上代码了

b<-as.numeric(summary(fit1)$ coeff[2,1])#提取系数
se<-as.numeric(summary(fit1)$ coeff[2,2]) #提取标准误
ER<-(exp(b*10)-1)*100 ####计算 PM 10每升高 10μg /m 3 ,死亡的超额危险度ER
ERlp<-(exp((b-1.96*se)* 10)-1)*100 #计算95%CI
ERup<-(exp((b+1.96*se)* 10)-1)*100 #计算95%CI

这样我们我们就制作出了lag01的线段图数据,作者用了单日滞后模型和多日滞后模型,分别是lag0—lag7我这里制作多日滞后模型,制作8天需要写一个循环。
其实就是把前面的过程整合起来

for (i in 0:7) {
  dat<-NULL
  pm10lag<-runMean(bc$pm10,0:i)###产生 pm10lag01变量,赋值为过去两天大气PM10浓度的移动均值
  bc$pm10lag<-pm10lag
  fit<-gam(death~pm10lag+ns(temp,3)+ns(o3,3)+ns(date,7*14),family = quasipoisson(),
            data=bc) #GAM 模型拟合 
  b<-as.numeric(summary(fit)$coeff[2,1])#提取系数
  se<-as.numeric(summary(fit)$ coeff [2,2]) #提取标准误
  ER<-(exp(b*10)-1)*100 ####计算 PM 10每升高 10μg /m 3 ,死亡的超额危险度ER
  ERlp<-(exp((b-1.96*se)* 10)-1)*100 #计算95%CI
  ERup<-(exp((b+1.96*se)* 10)-1)*100 #计算95%CI
  lag<- paste0(i)
  d<-data.frame(lag=lag,ER=ER,se=se,ERlp=ERlp,ERup=ERup)
  dat<-rbind(dat,d)
}

最后的出dat就是lag0—lag7的数据

在这里插入图片描述
得出以后就可以绘图了

pd <- position_dodge(0.001)

ggplot(dat, aes(x=lag, y=ER)) + 
  geom_errorbar(aes(ymin=ERlp,ymax=ERup),width=.1,position=pd) +
  geom_line(position=pd) +
  geom_point(position=pd)

在这里插入图片描述
这样图就完成了,如果画分类怎么画呢,就是对数据取亚组就可以了,下面来演示一下,先把数据分成两个亚组

bc.m<-subset(bc,bc$fage==0)
bc.f<-subset(bc,bc$fage==1)

分好亚组后就可以得到两个数据,我们就可以像之前一样,分别对每个单组一样跑循环,最后生成两个数据dat1,dat2
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们需要把这两个图合并,生成一个绘图数据

datapolt<-rbind(dat1,dat2)

在这里插入图片描述
最后绘图

pd <- position_dodge(0.1)

ggplot(datapolt, aes(x=lag, y=ER, colour=group)) + 
  geom_errorbar(aes(ymin= ERlp, ymax= ERup), width=.1) +
  geom_line(position=pd) +
  geom_point(position=pd)

在这里插入图片描述
修饰一下

ggplot(datapolt, aes(x=lag, y=ER, colour=group)) + 
  geom_errorbar(aes(ymin= ERlp, ymax= ERup), width=.1) +
  geom_line(position=pd) +
  geom_point(position=pd)+
  theme_bw()+
  theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank())+
  xlab("lag天数")+
  ylab("ER")+
  ggtitle("lag天数与ER关系")

在这里插入图片描述
如果不想要连线

ggplot(datapolt, aes(x=lag, y=ER, colour=group)) + 
  geom_errorbar(aes(ymin= ERlp, ymax= ERup), width=.1) +
  geom_point(position=pd)+
  theme_bw()+
  theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank())+
  xlab("lag天数")+
  ylab("ER")+
  ggtitle("lag天数与ER关系")

在这里插入图片描述
这个分类变量是我自己生成的,绘制出图形肯定有点怪,但是方法就是这样了,如果想对多个指标进行分面,可以参照图一方法,我这里就不弄了,下节继续介绍下图的绘制
在这里插入图片描述
OK,本章结束觉得有用的话多多分享哟。
原创不易,需要文章数据和全部代码的朋友,请把本文章转发朋友圈集10个赞,截图发给我,嫌麻烦的给我打赏5元截图发给我也可以。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/351932.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中频采样和IQ采样的比较和转换

一、什么是中频采样&#xff0c;什么是IQ采样 射频接收系统通常使用数字信号处理算法进行信号解调和分析&#xff0c;因此需要使用ADC对信号进行采样。根据采样频率的不同&#xff0c;可以分为射频直接采样、中频采样、IQ采样。射频采样和中频采样只需要一路ADC&#xff0c;采…

搜索引擎ES相关问题

一、什么是倒排索引&#xff1f;有什么好处&#xff1f;索引&#xff1a; 从ID到内容。倒排索引&#xff1a; 从内容到ID。好处&#xff1a; 比较适合做关键字检索。 可以控制数据的总量。提高查询效率。搜索引擎为什么比MySQL查询快&#xff1f; lucence文章 -》 term ->排…

element-ui中el-table点击其他自定义按钮展开table中某一行

element-ui中el-table点击其他自定义按钮展开table中某一行 在日常开发中&#xff0c;我们遇见了会有点击某些按钮&#xff0c;使得表格行展开的需求&#xff0c;这时候去查看文档 element-ui&#xff08;table&#xff09; 这里官方提供了示例为在行最左侧有一个展开合并ico…

JAVA开发测试(jmeter如何测试性能与估算)

对C的业务网站或应用&#xff0c;进行性能测试来评估使用服务器情况是必不可少的一项工作。 一、测试工具&#xff1a; Apache JMeter 可以用于对服务器、网络或对象模拟巨大的负载&#xff0c;来自不同压力类别下测试它们的强度和分析整体性能&#xff0c;是Apache组织开发的…

CCF-CSP真题《202212-1 现值计算》思路+python满分题解

想查看其他题的真题及题解的同学可以前往查看&#xff1a;CCF-CSP真题附题解大全 试题编号&#xff1a;202212-1试题名称&#xff1a;现值计算时间限制&#xff1a;1.0s内存限制&#xff1a;512.0MB问题描述&#xff1a; 问题描述 评估一个长期项目的投资收益&#xff0c;资金的…

中点BH算法对任意斜率的直线扫描转换方法

作者&#xff1a;非妃是公主 专栏&#xff1a;《计算机图形学》 博客地址&#xff1a;https://blog.csdn.net/myf_666 个性签&#xff1a;顺境不惰&#xff0c;逆境不馁&#xff0c;以心制境&#xff0c;万事可成。——曾国藩 文章目录专栏推荐专栏系列文章序一、算法原理二、…

六“元”数智增长模型,企业元宇宙时代的经营新范式

摘要&#xff1a;在中国传统哲学里&#xff0c;“元”表示最基本的、最根本的东西;在企业管理经营中&#xff0c;将“元”解释为企业的核心竞争力或者基础能力;元宇宙下&#xff0c;“元”就代表数智化下的新场景&#xff0c;来支撑企业的各种业务创新。 一、元宇宙下的“元” …

分享IDEA通过插件 【一键自动生成】 在线api接口文档

开发写代码已经很辛苦&#xff0c;相信每个开发人员都不想写接口文档&#xff0c;但是不写又不行。尤其现在开发的项目偏向于前后端分离&#xff0c;在没有接口的情况下&#xff0c;前后端很难对接联调&#xff0c;测试也无法很好的测试。现在IDEA的插件仓库里有款插件&#xf…

qt 内存泄漏处理办法

windows 版本windows msvc版本可以使用vld检测可以得到内存泄漏点的调用堆栈&#xff0c;如果可以的话&#xff0c;还可以得到其所在文件及行号&#xff1b;可以得到泄露内存的完整数据&#xff1b;可以设置内存泄露报告的级别。缺点&#xff1a;1.只针对 Visual C &#xff08…

VUE -- defineExpose

defineExpose定义demo定义 defineExpose定义&#xff1a;用于组件通信中父级组件调用操作子组建方法和响应式属性参数能力 在使用definExpose前需要了解两个拷贝对象函数 对象copy&#xff1a;shallowReactive 与 数据 copy&#xff1a;shallowRef 这两个都是vue包里面的 简…

图片文字识别OCR调研-中文

直接看效果对比 tesseract-ocr 该识别引擎最新版本tesseract4添加了支持神经网络&#xff08;LSTM&#xff09;的&#xff0c;该引擎专注于线条识别&#xff0c; 同时也保留了Tesseract OCR 引擎&#xff0c;该引擎通过识别字符模式来工作。 我们需求端的后台语言是go&#x…

时尚高级实用,零跑C01满足各种用车需求

零跑C01在新能源车市场上销量可观且口碑较好&#xff0c;为什么消费者会相中这个国产车全域自主研发的新能源车呢&#xff1f;下面的介绍会给出答案。就其外观而言&#xff0c;零跑C01的外观定位于中大型轿车&#xff0c;在外观设计上充分考虑到美学观念。零跑给出了七个车身颜…

扬帆优配|日均客运量恢复,民航业加速复苏,外资买入2股超亿元

春运民航客运量康复至疫情前七成。 2月16日&#xff0c;民航局举行2月例行新闻发布会。会上介绍&#xff0c;自1月7日至2月15日&#xff0c;春运40天&#xff0c;民航运送旅客5523万人次&#xff0c;日均客运量138万人次&#xff0c;同比去年春运添加39%&#xff0c;康复至2019…

Lesson5.1---Python 之 NumPy 简介和创建数组

一、NumPy 简介 NumPy&#xff08;Numerical Python&#xff09;是 Python 的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵&#xff0c;比 Python 自身的嵌套列表&#xff08;nested list structure&#xff09;结构要高效的多&#xff08;该结构也可以用来表示…

【贰】嵌入式系统的分类

随手拍拍&#x1f481;‍♂️&#x1f4f7; 日期: 2022.08.31 地点: 杭州 介绍: 2022.08.31下午一点&#xff0c;在闷热的学校里实在是待不下去了&#xff0c;跑到了门口的钱塘江边散了一会儿步&#x1f6b6;正值盛夏&#xff0c;八月即将完结&#xff0c;日子越过越快&#x1…

FPGA MAX 10 10M50系列10M50DAF484C8G/10M50DAF484C7G/10M50DCF484C7G规格

介绍MAX 10器件是单芯片、非易失性低成本可编程逻辑器件(pld)&#xff0c;用于集成最优的系统组件集。MAX 10设备的亮点包括:内部存储双配置闪存用户闪存即时支持集成模数转换器(adc)支持Nios II单芯片软核处理器MAX 10设备是系统管理、I/O扩展、通信控制平面、工业、汽车和消费…

ant design vue 组件中经常会出现 label过长被盖住的情况

ant design vue 组件中经常会出现 label过长被盖住的情况&#xff0c;我还特地找了解决方法&#xff1a;当过长时让他换行显示&#xff0c;还写了一篇博客记录&#xff0c;今天同样是写代码&#xff0c;但并没有做特殊的设置&#xff0c;结果却出乎意料的正常&#xff0c;过长自…

2023美赛A题:收干旱影响的植物群落(MCM)思路Python代码

赛题目的:分析干旱程度与植物群落中物种数量的关系赛题解读&解题思路链接: (1)这道题的难点是寻找数据,如果能找到干旱程度的适应性代表的指标以及对应植物群落物种的数量,那这道题基本上是迎刃而解,只需要简单去搭建一个预测模型即可仿真 (2)目标是对马萨马拉这个…

基于dll注入 读取任务管理器中指定进程的详细信息

关键字 注入dll&#xff0c;遍历ListView 技术调研背景 QA测试程序时&#xff0c;往往需要关注进程的性能指标&#xff0c;比如&#xff1a;CPU&#xff0c;GPU&#xff0c;内存&#xff0c;显存。最终根据各个采样数据&#xff0c;生成基于时间轴的状态表&#xff08;类似任…

37.网络结构与模型压缩、加速-4

37.1 减少网络碎片化程度(分支数量) 模型中分支数量越少,模型速度越快 此结论主要是由实验结果所得。 以下为网络分支数和各分支包含的卷积数目对神经网络速度的影响。 实验中使用的基本网络结构,分别将它们重复10次,然后进行实验。实验结果如下: 由实验结果可知,随着网络…