R语言gWQS包在加权分位数和回归模型的应用
在流行病学研究中,相较于单一因素的暴露,多因素同时暴露的情况更为常见。传统模型在评价多因素联合暴露时存在数据维度高、多重共线性等问题. WQS 回归模型的基本原理是通过分位数间距及加权的方法,将多种研究因素的效应综合成为一个指数,再进行回归分析。不同因素赋予的权重反映了其对结局的影响程度。使用该模型时应满足各研究因素
对结局影响的方向相同这一基本假设.

模型的一般形式为:

式中:c 表示污染物种类;β 0 表示截距;β 1 表示回归系数,用于限制联合效应对结局影响的方向;w i 表示第 i 种因素的未知权重,取值范围[0,1],且 ∑wi = 1,q i 表示对因素 i 进行 q 分位(如三、四分位等);

上公式表示c 种研究因素的综合权重指数;z 为协变量矩阵,φ为该矩阵的回归系数;g ( )为连接函数,μ 为均数。

下面咱们来进行演示一下,先导入R包和数据,数据使用的是gWQS自带的数据
library(gWQS)
library(ggplot2)
library(reshape2)
data(wqs_data)

数据挺大的,上图只是数据的一部分,这些数据反映了参与NHANES研究(2001-2002)的受试者中34种多氯联苯暴露和25种邻苯二甲酸酯生物标志物的分布模拟的59种暴露浓度,概括来说就是一些指标的浓度,结局有连续变量和分类变量,还有性别作为协变量。
WQS 回归模型的思想就是把指标打包成一个指数,第一步先要确定咱们研究哪些指标,假设咱们研究的是前面34种指标
PCBs <- names(wqs_data)[1:34]
PCBs

然后就可以生成模型了, 通过 y ~ wqs+sex 将 y 与 34种 PCBs 的联合效应,建立回归方程并调整性别(sex)。其中wqs 是固定参数(即:必须包含项), mix_name=mix 表示指定联合暴露污染物,data =wqs_data 表示输入的数据集为 wqs_data;q=10表示将联合效应进行10分位,在实际运用过程中研究者可设置不同的分位数;validation=0.6 表示随机抽取数据集中的 60% 作为验证集,余下的 40% 作为训练集;b表示 bootstrap 随机抽样次数,该参数至少为 100;b1_pos=TRUE 表示设定联合效应的权重为正 (若为
负则设置为 FALSE);b1_constr=FALSE 表示使用优化算法对权重进行估计时不进行限制(若进行限制则设置为 TURE);family="gaussian"表示采用高斯分布进行拟合,也可根据研究对象的数据类型采用二项分布、多项式或泊松分布等进行拟合;由于涉及 boot⁃strap 随机抽样过程,将随机种子数 (seed) 设置为2021。
results2i <-gwqs (y ~ wqs+sex, mix_name=PCBs, data=wqs_data,q=10, validation=0.6, b=100, b1_pos=TRUE,b1_constr=FALSE, family="gaussian", seed=2021)

解析结果,可以看到这个联合指数是和结局相关的
summary(results2i)

也可以使用gwqs解析函数,生成标准化表格
gwqs_summary_tab(results2i)

这样也可以查看系数和可信区间
summary(results2i)[["coefficients"]]
confint(results2i)

接下来咱们
咱们查看污染物权重构成比
gwqs_weights_tab(results2i)

这样也可以的
results2i$final_weights
可以进一步可视化,画个条形图,咱们可以看到,前4个指标对结局影响最大
gwqs_barplot(results2i)

咱们也可以把数据提取出来使用ggplot来话,这样更加美观
w_ord <- order(results2i$final_weights$mean_weight)
mean_weight <- results2i$final_weights$mean_weight[w_ord]mix_name <- factor(results2i$final_weights$mix_name[w_ord],levels = results2i$final_weights$mix_name[w_ord])
dataplot <- data.frame(mean_weight, mix_name)ggplot(dataplot, aes(x = mix_name, y = mean_weight, fill = mix_name)) +geom_bar(stat = "identity", color = "black") + theme_bw() +theme(axis.ticks = element_blank(),axis.title = element_blank(),axis.text.x = element_text(color='black'),legend.position = "none") + coord_flip()

画个相关曲线图,可以看到是正相关
gwqs_scatterplot(results2i)

绘制残差图,可以检查它们是否随机分布在0附近或是否有趋势
gwqs_fitted_vs_resid(results2i)

咱们还可以进行箱线图绘制,但是绘制箱线图需要使用gwqsrh函数生成下结果
results3i <-gwqsrh (y ~ wqs+sex, mix_name=PCBs, data=wqs_data,q=10, validation=0.6, b=5, b1_pos=TRUE,seed=2021,b1_constr=FALSE, family="gaussian", future.seed=TRUE)
生成结果后绘图
gWQS::gwqsrh_boxplot(results3i)

也可以使用ggplot提取数据绘图
wboxplot <- melt(results3i$wmat, varnames = c("rh", "mix_name"))wboxplot$mix_name <- factor(wboxplot$mix_name, levels = results3i$final_weights$mix_name)ggplot(wboxplot, aes(x = mix_name, y = value,fill=mix_name))+geom_boxplot()+theme_bw()+theme(axis.text.x = element_text(angle = 45, hjust = 1))

还可以调整一下
ggplot(wboxplot, aes(x = mix_name, y = value,fill=mix_name))+geom_boxplot()+theme_bw()+theme(axis.text.x = element_text(angle = 45, hjust = 1))+ylab("Weight (%)") + stat_summary(fun.y = mean, geom = "point", shape = 18, size = 3) + geom_jitter(alpha = 0.3)

如果结局是二分类指标,咱们还可以绘制roc曲线,咱们从新生成一个结果
results4i <-gwqs (ybin ~ wqs+sex, mix_name=PCBs, data=wqs_data,q=10, validation=0.6, b=100, b1_pos=TRUE,b1_constr=FALSE, family="binomial", seed=2021)gwqs_ROC(results4i,wqs_data)

参考文献
- gwqs说明文件
- Carrico C , Gennings C , Wheeler D C ,et al.Characterization of Weighted Quantile Sum Regression for Highly Correlated Data in a Risk Analysis Setting[J].Journal of Agricultural, Biological, and Environmental Statistics, 2014.DOI:10.1007/s13253-014-0180-3.
- 李珽君,黄俊理,陈海建,莫春宝.加权分位数和回归模型的应用及R软件实现[J].预防医学,2023,35(3):275-276.DOI:10.19485/j.cnki.issn2096-5087.2023.03.021.
- https://blog.csdn.net/qq_42458954/article/details/120157806
- https://blog.csdn.net/weixin_42812146/article/details/126192945
相关文章:
R语言gWQS包在加权分位数和回归模型的应用
在流行病学研究中,相较于单一因素的暴露,多因素同时暴露的情况更为常见。传统模型在评价多因素联合暴露时存在数据维度高、多重共线性等问题. WQS 回归模型的基本原理是通过分位数间距及加权的方法,将多种研究因素的效应综合成为一个指数&…...
【Makelist】release无法生成pdb
记录makelist使用中遇到的问题 一、release版无法生成pdb 【解决方法】:需要在最大级的Makelist下的设置编译器选项添加如下标记 #release 链接库生成pdbSET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi")#lib的 release链接库生成pdbSET…...
【Linux】信号的保存和捕捉
文章目录 一、信号的保存——信号的三个表——block表,pending表,handler表sigset_t信号集操作函数——用户层sigprocmask和sigpending——内核层 二、信号的捕捉重谈进程地址空间(第三次)用户态和内核态sigaction可重入函数volat…...
Sourcepawn脚本入门(二)命令与事件监听
🍎Sourcepawn脚本入门(二)命令与事件监听 (控制台)命令是常用的插件形式,eg. noclip …等都是常用的命令,在游戏中使用也很容易,souremod可以注册自己的命令。 事件的监听则需要考虑到不同的起源游戏支持的事件不同&am…...
java-poi操作笔记
row表示行,cell表示row中的第几个cell package sample.Utils;import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.DateUtil; import org.apache.poi.ss.usermodel.Workbook; impor…...
PHP:js中怎么使用PHP变量,php变量为数组时的处理
方法一:使用内嵌 PHP 脚本标记 1、简单的拼接 使用内嵌的 PHP 脚本标记 <?php ?> 将 PHP 变量 $phpVariable 的值嵌入到 JavaScript 代码中。 <?php $phpVariable "Hello, World!"; ?><script> // 将 PHP 变量的值传递给 JavaS…...
网工学习7-配置 GVRP 协议
7.1GARP概述 GARP(Generic Attribute Registration Protocol)是通用属性注册协议的应用,提供 802.1Q 兼容的 VLAN 裁剪 VLAN pruning 功能和在 802.1Q 干线端口 trunk port 上建立动态 VLAN 的功能。 GARP 作为一个属性注册协议的载体,可以用来传播属性…...
python:格式化输出指定内容
python:格式化输出指定内容 当涉及到在Python中格式化输出指定内容时,有几种方法可以让您的输出更加清晰和易读。Python的f-string(格式化字符串)是一种简洁而强大的工具,可以帮助您以所需的格式输出数据。 首先&…...
【C语言】7-35 强迫症 分数 10
7-35 强迫症 分数 10 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 小强在统计一个小区里居民的出生年月,但是发现大家填写的生日格式不统一,例如有的人写 199808,有的人只写 9808。有强迫症的小强请你写个程序,把所有人的…...
如何快速了解一家公司?
在炒股过程中,我们想要了解一家公司是否具有投资价值,需要查看和阅读很多公司的相关资料。股民们自行去查询往往会花费很多的时间精力,所以专业的炒股软件一般都会给股民提供这些现成的资料。 在金斗云智投APP内,进入到个股详情页…...
ZPLPrinter Emulator SDK for .NET 6.0.23.1123 Crack
ZPLPrinter Emulator SDK for .NET 适用于 .NET 的 ZPLPrinter 仿真器 SDK 允许您通过编写 C# 或VB.NET 代码针对任何 .NET Framework、.NET CORE、旧版 ASP.NET MVC 和 CORE、Xamarin、Mono 和通用 Windows 平台 (UWP) 作业。 适用于 .NET 的 ZPLPrinter 仿真器 SDK 允许您将…...
查收查引(通过文献检索开具论文收录或引用的检索证明)
开具论文收录证明的 专业术语为 查收查引,是高校图书馆、情报机构或信息服务机构提供的一项有偿服务。 因检索需要一定的时间,提交委托时请预留足够的检索时间。 一般需要提供:论文题目、作者、期刊名称、发表年代、卷期、页码。 目录 一、查…...
Python一帮一
在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。 输入格式: 输入第一行给出正偶数N(≤50),即全班学生的人数。此后N行,按照名次从高到低的顺序给出每个学生的性别࿰…...
学员追访 | “IC的标签并不是只有高薪与965”
大家好,我是08期的学员小D 。 很开心能在这里与大家分享我的学习、工作经历,我毕业于一所双非本科院校。现在已经入职五个月了,很满意目前的薪资水平和工作状态。 接下来我把我的学习经历和求职经验给大家做个分享,希望能够帮到…...
LeetCode(39)赎金信【哈希表】【简单】
目录 1.题目2.答案3.提交结果截图 链接: 赎金信 1.题目 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字…...
输入日期求n天后
题目要求:输入一个日期startdate年月日和days天数(>1),输出自该日期days天后的日期enddate。 要求输出和输出的年份为四位整数,输入时对输入数据的有效性进行检查;同时考虑跨月,跨年和闰年情…...
科技论文中的Assumption、Remark、Property、Lemma、Theorem、Proof含义
一、背景 学控制、数学、自动化专业的学生在阅读论文时,经常会看到Assumption、Remark、Property、Lemma、Theorem、Proof等单词,对于初学者可能不太清楚他们之间的区别,因此这里做一下详细的说明。 以机器人领域的论文为例。 论文题目&…...
逆向爬虫进阶实战:突破反爬虫机制,实现数据抓取
文章目录 一、引言二、逆向爬虫进阶技巧三、逆向爬虫进阶实战代码片段四、总结与展望好书推荐内容简介作者简介前言节选 一、引言 随着网络技术的发展,网站为了保护自己的数据和资源,纷纷采用了各种反爬虫机制。然而,逆向爬虫技术的出现&…...
个体民营诊所-如何打破传统发展瓶颈,增客流-提营收?
随着人们对传统医学和自然疗法的需求增加,开办针灸诊所可以满足社会公众对健康的需求,提供更多元化的医疗选择。 针灸作为一种传统的中医疗法,不仅可以帮助调理身体,还能帮助客户缓解疼痛,改善循环等。但针灸诊所&…...
Filament引擎分析--command抽象设备API
1. 前言 Filament中使用了FrameGraph来管理渲染管线,需要准备两点: 设备接口抽象:设备API抽象为Command资源抽象:使用虚拟资源,在实际用到时再创建,方便剔除无用资源 下面就围绕Filament中设备API抽象为…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
Matlab实现任意伪彩色图像可视化显示
Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中,如何展示好看的实验结果图像非常重要!!! 1、灰度原始图像 灰度图像每个像素点只有一个数值,代表该点的亮度(或…...
ZYNQ学习记录FPGA(二)Verilog语言
一、Verilog简介 1.1 HDL(Hardware Description language) 在解释HDL之前,先来了解一下数字系统设计的流程:逻辑设计 -> 电路实现 -> 系统验证。 逻辑设计又称前端,在这个过程中就需要用到HDL,正文…...
