汽车专业网站,wordpress怎么写php,关于网站建设培训,网站建设怎么好美国国家健康与营养调查#xff08; NHANES, National Health and Nutrition Examination Survey#xff09;是一项基于人群的横断面调查#xff0c;旨在收集有关美国家庭人口健康和营养的信息。 地址为#xff1a;https://wwwn.cdc.gov/nchs/nhanes/Default.aspx 在既往的…美国国家健康与营养调查 NHANES, National Health and Nutrition Examination Survey是一项基于人群的横断面调查旨在收集有关美国家庭人口健康和营养的信息。 地址为https://wwwn.cdc.gov/nchs/nhanes/Default.aspx 在既往的文章《Nhanes临床数据库挖掘教程2—基线表绘制(table1)》中咱们已经介绍了tableone包绘制NHANES数据的基线表今天咱们来介绍一下如何手动绘制NHANES数据的基线表手动的好处就是一来可以加深你对操作的理解二是比较灵活tableone包输出的格式比较固定例如你想把人数改成不加权的就需要手工计算而且可以通过两种方法相互印证。 咱们继续使用文章《Nhanes临床数据库挖掘教程2—基线表绘制(table1)》中的数据为例子先导入R包和数据
library(survey)
bc-read.csv(E:/nhanes/nhanes.csv,sep,,headerTRUE)我介绍一下数据SEQN序列号RIAGENDR, # 性别 RIDAGEYR, # 年龄RIDRETH1, # 种族DMDMARTL, # 婚姻状况WTINT2YR,WTMEC2YR, # 权重SDMVPSU, # psuSDMVSTRA# strataLBDGLUSI, #血糖mmol表示LBDINSI, #胰岛素( pmmol/L)PHAFSTHR #餐后血糖LBXGH #糖化血红蛋白SPXNFEV1, #FEV1第一秒用力呼气量SPXNFVC #FVC用力肺活量ml估计肺容量LBDGLTSI #餐后2小时血糖。 为了做出来后有对比我按文章《Nhanes临床数据库挖掘教程2—基线表绘制(table1)》中对糖尿病进行了一个分段处理OCTT小于7.8算是正常患者7.8—11是糖尿病前期大于11为糖尿病。
bc$oGTT2-ifelse(bc$LBDGLTSI7.8,1,ifelse(bc$LBDGLTSI11,3,2))上面代码的意思是把小于7.8的分类为1大于11的分类为3其余分类为2 因为tableone包可以自动把分类变量转成因子我们这里手动制作的话需要自己把分类变量转成因子
bc[,c(RIAGENDR, RIDRETH1,DMDMARTL)] - lapply(bc[,c(RIAGENDR, RIDRETH1,DMDMARTL)], factor)转成因子后下面开始建立抽样调查函数svydesignids表示集群的意思这里填入抽样单元SDMVPSUPSU如果没有的话填入1strata ~ SDMVSTRAstrata这里是分层的意思这里填入SDMVSTRAweights是权重的意思参照别的大佬的意思如WTINT2YR,WTMEC2YR,这两个权重就填入WTMEC2YRdata填入你的数据就可以了
bcSvy2- svydesign(ids ~ SDMVPSU, strata ~ SDMVSTRA, weights ~ WTMEC2YR,nest TRUE, data bc)生成调查函数bcSvy2后咱们就可以进行计算了这里我们生成一个按照oGTT2分类的基线表就是不同血糖程度的基线值水平。 主要是使用survey包自带的函数来进行计算计算连续的和分类的要分开计算 咱们先来计算连续的主要是使用svyby这个函数来搭配计算假设咱们想了解不同oGTT2的年龄分布基线
svyby(~RIDAGEYR, ~oGTT2, bcSvy2, svymean)这样结果就出来了可以看到和tableone包算出来的一模一样。(下图是tableone包算出来的) 如果想求可信区间
svyby(~RIDAGEYR, ~ oGTT2, bcSvy2, svymean , vartypeci)如果咱们想按分位数来求
svyby(~RIDAGEYR, ~oGTT2, bcSvy2, svyquantile, quantiles0.5,ciTRUE,vartypeci)如果想求每组为未加权加权的人数
svyby(~RIDAGEYR, ~oGTT2, bcSvy2, unwtd.count, keep.varFALSE)接下来咱们看一下分类变量怎么计算分类变量主要是使用svytable函数来计算咱们这里以种族RIDRETH1为例子 svyby(~RIDRETH1, ~oGTT2, bcSvy2, svytotal,covmatTRUE) 这里算出来的也和tableone包一模一样 这样连续和分类变量的都算出来啦。间接印证了咱们使用tableone包计算是正确的新手还是使用tableone包来计算容易点。
最后聊下近期近期一直在写一键生成NHANSE数据亚组交互效应表的函数P for interaction但是出现一个小问题卡住了就是就是在函数内部生成svyglm模型的时候我们需要使用anova函数获取模型的P for interaction的值但是这个时候R会提示design函数找不到如下图所示。 这个问题卡了我好几天实在没办法后面我写了封邮件问survey包的作者thomas教授这个问题怎么解决。thomas教授说这个survey包目前没法解决他需要从新写anova.svyglm函数有可能在新版本解决这个问题但thomas教授给了我解决这个问题的方案。 为什么我要说这个东西因为这个东西既然目前survey包目前没法解决那么很多基于survey包anova.svyglm函数来实现算法的函数和R包就是错的。因为design函数只能在全局环境找到在其他环境找不到。 这里我要提一下jstable包很多粉丝和我提到了这个包而且我看见有些博主也推荐了这个包这个包在分析复查加权数据时就是用了anova.svyglm函数因此你的数据一旦是多项交互它就会报错。而且这个包的逻辑和咱们平时就算交互效应的时候还是不一样的咱们平时计算交互效应通常是yaba*b 而jstable包的计算逻辑是y a*b。这样计算出来的东西就完全不一样了。自己做的时候根据需求吧。