R语言使用dietaryindex包计算NHANES数据多种健康饮食指数 (HEI等)(1)

健康饮食指数 (HEI) 是评估一组食物是否符合美国人膳食指南 (DGA) 的指标。Dietindex包提供用户友好的简化方法,将饮食摄入数据标准化为基于指数的饮食模式,从而能够评估流行病学和临床研究中对这些模式的遵守情况,从而促进精准营养。

在这里插入图片描述
该软件包可以计算以下饮食模式指数:
• 2020 年健康饮食指数(HEI2020 和 HEI-Toddlers-2020)
• 2015 年健康饮食指数 (HEI2015)
• 另类健康饮食指数(AHEI)
• 控制高血压指数 (DASH) 的饮食方法
• DASH 试验中的 DASH 份量指数 (DASHI)
• 替代地中海饮食评分 (aMED)
• PREDIMED 试验中的 MED 份量指数 (MEDI)
• 膳食炎症指数 (DII)
• 美国癌症协会 2020 年饮食评分(ACS2020_V1 和 ACS2020_V2)
• EAT-Lancet 委员会 (PHDI) 的行星健康饮食指数
下面咱们来演示一下,首先要安装这个包,使用下面代码安装

library(devtools) # Load devtools
install_github("jamesjiadazhan/dietaryindex")

安装好后,按作者的要求,先导入依赖包,然后再倒入R包

library(dplyr)
library(haven)
library(readr)
library(dietaryindex)

咱们以2020 年健康饮食指数(HEI2020)为例子,咱们先来看下它的函数HEI2020_NHANES_FPED,它的函数结构是

HEI2020_NHANES_FPED(
  FPED_PATH = NULL,
  NUTRIENT_PATH = NULL,
  DEMO_PATH,
  FPED_PATH2 = NULL,
  NUTRIENT_PATH2 = NULL
)

咱们看下这几个参数的说明
FPED_PATH
FPED 数据的文件路径。文件名应为:fped_dr1tot_1112.sas7bdat

NUTRIENT
NUTRIENT 数据的文件路径。文件名应为 DR1TOT_J.XPT

DEMO_PATH
DEMOGRAPHIC 数据的文件路径。文件名应为 DEMO_J.XPT

FPED_PATH2
FPED2 数据的文件路径。文件名应为: fped_DR2tot_1112.sas7bdat

NUTRIENT_PATH2
NUTRIENT2 数据的文件路径。文件名应类似于 DR2TOT_J.XPT

其中FPED_PATH和FPED_PATH2(第一天和第二天)是一起的,DEMO_PATH 和NUTRIENT_PATH2 一起的(第一天和第二天),等于分成3个部分。

FPED 人口文件是指 WWEIA 中食品的食品模式等效文件,可以在这个网址下载:https://www.ars.usda.gov/northeast-area/beltsville-md-bhnrc/beltsville-human-nutrition-research-center/food-surveys-research-group/docs/fped-databases/
打开页面后,如果咱们想研究2017-2018年的
在这里插入图片描述
进入界面后选择Food Patterns equivalents for foods in the WWEIA, NHANES 2017-2018这里就是第一天和第二天的

在这里插入图片描述
最后得到如下图两个文件

在这里插入图片描述
这两个文件还要进一步解压才行,最后得到fped_dr1tot_1718.sas7bdat和fped_dr2tot_1718.sas7bdat这两个数据文件

营养人群文件是指饮食访谈中的文件 - 总营养摄入量,第一天或第二天,可以在这个地址下载,后面这Year=这里可以选择年份,我们选2017年和2018年的
https://wwwn.cdc.gov/nchs/nhanes/search/datapage.aspx?Component=Dietary&CycleBeginYear=2017

然后选择第三和第四个就是第一和第二天了,要是这种TOT的文件

在这里插入图片描述

最后的DEMO文件是指人口统计变量和样本权重中的DEMO文件,在下面这个地址可以下载,选年份和上面是一样的
https://wwwn.cdc.gov/nchs/nhanes/search/datapage.aspx?Component=Demographics&CycleBeginYear=2017

这里不用选,直接下载就可以了

在这里插入图片描述
至此,咱们已经把HEI2020_NHANES_FPED函数所需要的5个文件全部下载完成,咱们把文件导入

library(haven)
setwd("E:/公众号文章2024年/dietaryindex包计算营养指数")
DEMO_PATH = read_xpt(file ='DEMO_J.XPT')#人口数据
FPED_PATH_1 = read_sas('fped_dr1tot_1718.sas7bdat')#第一天数据
NUTRIENT_PATH_1 = read_xpt(file ='DR1TOT_J.XPT')#第一天数据
FPED_PATH_2 = read_sas('fped_dr2tot_1718.sas7bdat')#第二天数据
NUTRIENT_PATH_2 = read_xpt(file ='DR2TOT_J.XPT')#第二天数据

把数据导入后就可以计算啦

dt<-HEI2020_NHANES_FPED(FPED_PATH = FPED_PATH_1, NUTRIENT_PATH = NUTRIENT_PATH_1,
                        DEMO_PATH = DEMO_PATH, 
                        FPED_PATH2 = FPED_PATH_2, NUTRIENT_PATH2 = NUTRIENT_PATH_2)

在这里插入图片描述
这样结果就出来了,其实作者还提供了更加简便的方法,在作者空间,作者已经把多个年份的数据打包,我们直接下载下来就可以用了,

在这里插入图片描述
比如2017-2018年是R包自带的数据

data("NHANES_20172018")
dt2<-HEI2020_NHANES_FPED(FPED_PATH = NHANES_20172018$FPED, NUTRIENT_PATH = NHANES_20172018$NUTRIENT,
                    DEMO_PATH = NHANES_20172018$DEMO, 
                    FPED_PATH2 = NHANES_20172018$FPED2, NUTRIENT_PATH2 = NHANES_20172018$NUTRIENT2)

哈,两步搞定,两个方法结果是一样的,有兴趣的自己试一下。

在这里插入图片描述
作者说了,目前得到的是未加权的数据,还需要加权处理一下,咱们先把数据合并一下

NHANES_20172018_design_d1 = NHANES_20172018$FPED %>%
   filter(!is.na(WTDRD1)) %>%
   ## select the variables needed for the survey design
   select(SEQN, SDMVPSU, SDMVSTRA, WTDRD1)
NHANES_20172018_design_d1_HEI2020 = inner_join(dt, NHANES_20172018_design_d1, by = "SEQN") 

在这里插入图片描述
生成调查数据

library(tableone)
library(survey)

NHANES_design_1718_d1 <- svydesign(
   ## Masked variance pseudo-PSU
   id = ~SDMVPSU, 
   ## Masked variance pseudo-stratum
   strata = ~SDMVSTRA, 
   ## Dietary day one sample weight
   weight = ~WTDRD1, 
   data = NHANES_20172018_design_d1_HEI2020, 
   nest = TRUE)

最后分析

dput(names(NHANES_20172018_design_d1_HEI2020))##输出变量名
allVars <-c("RIDAGEYR", "HEI2020_ALL", "HEI2020_TOTALFRT", "HEI2020_FRT", 
            "HEI2020_VEG", "HEI2020_GREENNBEAN", "HEI2020_TOTALPRO", "HEI2020_SEAPLANTPRO", 
            "HEI2020_WHOLEGRAIN", "HEI2020_DAIRY", "HEI2020_FATTYACID", "HEI2020_REFINEDGRAIN", 
            "HEI2020_SODIUM", "HEI2020_ADDEDSUGAR", "HEI2020_SATFAT", "SDMVPSU", 
            "SDMVSTRA", "WTDRD1")###所有变量名
fvars<-c("SDMVPSU")#分类变量定义为fvars
Svytab2<- svyCreateTableOne(vars = allVars,
                            data =NHANES_design_1718_d1 ,
                            factorVars = fvars)
Svytab2

在这里插入图片描述
对于其他的指标也是一样的。今天简单的介绍了HEI2020指数的计算,其他指数也是一样的,未完待续。

参考文献:

  1. dietaryindex包说明
  2. https://github.com/jamesjiadazhan/dietaryindex
  3. https://jamesjiadazhan.github.io/dietaryindex_manual/
  4. https://mp.weixin.qq.com/s/Wbu58wdsgGVVI5aQ-d4LzA
### ROC 曲线概述 ROC曲线(受试者工作特征曲线)是一种广泛应用于二值分类器性能评估的图形化表示方法[^1]。该曲线通过描绘真阳性率(True Positive Rate, TPR),也称为敏感度或召回率,与假阳性率(False Positive Rate, FPR)之间的关系来展示不同阈值下的模型表现。 #### 真阳性和假阳性率计算方式 对于给定的一个概率预测模型,在不同的决策边界下可以得到一系列混淆矩阵。基于此,TPR 和 FPR 的定义如下: - **真阳性率 (TPR)** 或 召回率 = TP / (TP + FN),其中 TP 表示真正例数,FN 是指假反例数。 - **假阳性率 (FPR)** = FP / (FP + TN),这里 FP 指的是假正例数量,TN 则代表真实负例的数量。 ```python from sklearn.metrics import roc_curve, auc import matplotlib.pyplot as plt def plot_roc(y_true, y_scores): fpr, tpr, _ = roc_curve(y_true, y_scores) roc_auc = auc(fpr, tpr) plt.figure() lw = 2 plt.plot(fpr, tpr, color='darkorange', lw=lw, label=f'ROC curve (area = {roc_auc:.2f})') plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--') plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver Operating Characteristic Curve') plt.legend(loc="lower right") plt.show() # 假设我们有一个真实的标签列表和对应的分数/概率估计 plot_roc([0, 1, 1, 0, 1], [0.1, 0.4, 0.35, 0.8, 0.7]) ``` #### AUC 度量标准 AUC即曲线下面积(Area Under the Curve), 它衡量了整个二维空间内的积分区域大小。理想情况下,当分类器完美区分两类数据时,其AUC等于1;而随机猜测的结果对应于一条斜率为1的直线,此时AUC=0.5。因此,较高的AUC意味着更好的分类能力[^2]。 #### 使用场景考量 尽管ROC曲线提供了全面的理解视角,但在某些特定条件下可能不如其他类型的图表实用。例如,在处理高度不平衡的数据集时,精确率-召回率(Precision-Recall)图可能会提供更直观的信息[^3]。
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天桥下的卖艺者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值