草庐IT

环境混合物总体效应:加权分位数和回归(WQS)

聊无的学习笔记 2023-11-11 原文

1 WQS原理

加权分位数和(Weighted Quantile Sum, WQS)回归是一种在环境暴露中常见的高维数据集的多元回归的统计模型。该模型允许通过有监督的方式构建一个加权指数,以评估环境暴露的总体效应以及混合物中每一个成分对总体效应的贡献。

首先若某一类环境混合物中共有i个component,将每个component的值按分位数编码,如1st,2nd,3rd, 4th 分位数分别编为qi = 1,2,3,4。

WQS的拟合的模型如下:

其中wi是环境混合物中每一个成分的权重,β1是加权分位数和指数(WQS指数)的回归系数,也就是环境混合物的总体效应。

如图中所示流程,为了估计各成分的权重,构建WQS指数,WQS算法首先将数据集分为训练集和验证集,训练集用于权重的估计,验证集用于测试最终 WQS 指数的显着性。为了提高模型的稳定性,在训练集里进行B次自助抽样(B=100或1000)


最后取100次自主抽样得到的权重的均值,或者只取100此中β1显著的那些次的权重均值作为最终得到的权重,然后在验证集中拟合模型(当样本量足够大时),若样本量小,也可在全部数据集中检验β1的显著性:

WQS的假设是:在混合物中每个暴露的效应都是同方向的(全为正或全为负),本质上是单向的,因为它只测试与给定结果正相关或负相关的混合效应。因此,在实践中,分析应该运行两次以测试正负两方向的关联。

2 WQS R语言示例

R语言的“gWQS”包可以实现WQS, 使用包里自带的示例数据wqs_data

install.packages("gWQS")
library(gWQS)
data(wqs_data)
toxic_chems <- names(wqs_data)[1:34]

# we run the model and save the results in the variable "results"
results <- gwqs(y ~ wqs, mix_name = toxic_chems,
                data = wqs_data, q = 4, validation = 0.6, b = 100,
                b1_pos = TRUE, b1_constr = FALSE, family = "gaussian",
                seed = 1, plots = TRUE, tables = TRUE)

该WQS模型检验了我们的因变量y和根据四分位数暴露浓度排序估计的WQS指数之间的关系(q=4);toxic_chems是混合物中所有components的名字,b=100为bootstrap的次数;60%的样本作为验证集;因为WQS只提供了混合效应的单向评估,我们只估计β1为正的权重(b1_pos=TRUE);我们可以通过将该参数设置为假(b1_pos=false)来检验负关联。当我们估计权重时,我们也可以选择将β1约束为正(b1_pos=TRUE和b1_constr=TRUE)或负(b1_pos=false和b1_constr=TRUE);seed为种子点

之后我们对权重进行排序并绘制权重的条形图:

w_ord <- order(results$final_weights$mean_weight)
mean_weight <- results$final_weights$mean_weight[w_ord]
mix_name <- factor(results$final_weights$mix_name[w_ord],
                      levels = results$final_weights$mix_name[w_ord])
data_plot <- data.frame(mean_weight, mix_name)
ggplot(data_plot, 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()


以及y和wqs指数的散点图加拟合线:

# scatter plot y vs wqs
 ggplot(results$y_wqs_df, aes(wqs, y_adj)) + geom_point() +
 stat_smooth(method = "loess", se = FALSE, size = 1.5) + theme_bw()


WQS 回归可以应用于多种类型的因变量,可以用逻辑回归、多项式、泊松和负二项式回归。WQS 的一个限制是由于必须将数据集拆分为训练集和验证集而导致的统计能力降低, 这种划分也可能导致不具代表性的数据集和不稳定的参数估计。

最后值得一提的是WQS的扩展方法:Bayesian WQS (Colicino et al. (2020)),它允许放宽单向假设,以及lagged WQS (Gennings et al. (2020)),它处理随时间变化的暴露混合物。

参考:

https://www.healthandenvironment.org/assets/images/Gennigs_Presentation_5-20-19.pdf
Renzetti S, Gennings C, Curtin P C. gWQS: an R package for linear and generalized weighted quantile sum (WQS) regression[J]. J Stat Softw, 2019: 1-9.

欢迎关注公众号:聊无的学习笔记

有关环境混合物总体效应:加权分位数和回归(WQS)的更多相关文章

  1. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  2. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

  3. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  4. ruby-on-rails - ruby gem如何在rails环境下工作 - 2

    我试图在rails中了解rubygems是如何变得可以自动使用的,而不是在使用required的文件中gem? 最佳答案 这是通过bundler/setup完成的:http://bundler.io/v1.3/bundler_setup.html.它在您的config/boot.rb文件中是必需的。简而言之,它首先将环境变量设置为指向您的Gemfile:ENV['BUNDLE_GEMFILE']||=File.expand_path('../../Gemfile',__FILE__)然后它通过要求bundler/setup将所有ge

  5. ruby-on-rails - 我需要一个真正的 UNIX RoR 开发环境 - 2

    从一开始,我就是一个Windows高手。我从MS-DOS开始。我安装了Windows2.1以及此后的所有Windows。现在,我家里有10台不同的Windows机器在运行,从Windows7Ultimate到各种版本的WindowsServer。我还没有完成Windows8,也不想去那里。我在服务器和各种软件方面都有UNIX经验,但它并不是我的首选环境。但是,我想我正在转换。我试图假装使用Cygwin和MSYS在Windows下运行UNIX。我的目的是搭建一个开发环境。两者都让我失望了。我花了比开发更多的时间来解决一系列技术问题。这是NotAcceptable。到目前为止,我的Ruby

  6. ruby - 如何测试正在使用 RSpec 和 Mocha 调用的混合类方法? - 2

    我有一个模块:moduleMyModuledefdo_something#...endend由类使用如下:classMyCommandextendMyModuledefself.execute#...do_somethingendend如何验证MyCommand.execute调用了do_something?我已经尝试使用mocha进行部分模拟,但是当未调用do_something时它不会失败:it"callsdo_something"doMyCommand.stubs(:do_something)MyCommand.executeend 最佳答案

  7. ruby-on-rails - 为什么 DataMapper 使用混合与继承? - 2

    所以我只是对此感到好奇:DataMapper为其模型使用混合classPostincludeDataMapper::Resource虽然active-record使用继承classPost有谁知道为什么DataMapper选择这样做(或者为什么AR选择不这样做)? 最佳答案 它允许您从另一个不是DM类的类继承。它还允许动态地将DM功能添加到类中。这是我正在处理的模块中的类方法:defdatamapper_classklass=self.dupklass.send(:include,DataMapper::Resource)klass

  8. ruby-on-rails - 为什么用户必须输入 7 位数的 Twitter PIN 才能授予我的应用程序访问权限? - 2

    我正在为我的用户实现一些ruby​​onrails代码推特内容。我正在创建正确的oauth链接...类似http://twitter.com/oauth/authorize?oauth_token=y2RkuftYAEkbEuIF7zKMuzWN30O2XxM8U9j0egtzKv但在我的测试帐户授予对twitter的访问权限后,它会弹出一个页面,上面写着“您已成功授予对.我不知道用户应该在哪里输入此PIN以及他们为什么必须这样做。我认为这不是必要的步骤。Twitter应该将用户重定向到我在应用程序设置中提供的回调URL。有谁知道为什么会这样?更新我找到了thisarticle声明我需

  9. ruby-on-rails - 如果特定语言环境中缺少翻译,如何配置 i18n 以使用 en 语言环境? - 2

    如果特定语言环境中缺少翻译,如何配置i18n以使用en语言环境翻译?当前已插入翻译缺失消息。我正在使用RoR3.1。 最佳答案 找到相似的question这里是答案:#application.rb#railswillfallbacktoconfig.i18n.default_localetranslationconfig.i18n.fallbacks=true#railswillfallbacktoen,nomatterwhatissetasconfig.i18n.default_localeconfig.i18n.fallback

  10. ruby-on-rails - 可移植 Ruby on Rails 环境 - 2

    我给自己买了一个新的8gigUSBkey,我正在寻找一个合适的解决方案来拥有一个可移植RoR环境来学习。我在谷歌上搜索了一下,发现了一些可能性,但我很想听听一些现实生活中的经历和意见。谢谢! 最佳答案 我喜欢InstantRails,非常容易使用,无需安装程序,也不会修改您的系统环境。 关于ruby-on-rails-可移植RubyonRails环境,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/q

随机推荐