亚组分析、P交互、P趋势是什么?如何计算呢?

news2024/12/23 20:27:13

亚组分析、P交互、P趋势是什么?如何计算呢?

(1)亚组分析如何计算?

(2)P交互作用的计算方法?

(3)P趋势如何计算?

(1)亚组分析如何计算

本篇不说理论,直接以R语言的lung数据集为例进行介绍。

除P交互的外,亚组分析和P趋势的计算以logistic模型为例进行说明:

自变量:sex(性别),age(年龄),ph.ecog(ECOG评分),wt.loss(过去六个月的体重减轻)

因变量:status(是否死亡)

交互作用我们主要关注性别和年龄的交互。

假设:我们主要关注性别和死亡的关系?

首先:由于要研究性别和死亡的关系,因此我们建立的主要分析模型如下:

Logit(p)=β1sex+β2age+β3ph.ecog+β4wt.loss+残差

在这里,β1是我们关注的主要解释参数。age+ph.ecog+wt.loss都是协变量

R语言代码:

#数据处理

library(rms)

library(dplyr)

data<-lung

#生成二分类新变量

data$age1 <- ifelse(data$age > 60,

                        c("1"), c("2"))

data$status<-data$status-1

str(data)#查看数据类型

#转化因子

a<-c("sex","age1")#填入需要转化的变量

data[,a]<-lapply(data[,a],as.factor)#转因子

#建立模型

#logistic模型:sex和status的关系

fit1 <- glm(status~sex+age1+ph.ecog+wt.loss,data=data,family = "binomial")

broom::tidy(fit1)

#自编函数,计算OR值

formatFit<-function(fit){

  #取P值

  p<-summary(fit)$coefficients[,4]

  #wald值

  wald<-summary(fit)$coefficients[,3]^2

  #B值

  valueB<-coef(fit)

  #OR值

  valueOR<-exp(coef(fit))

  #OR值得95%CI

  confitOR<-exp(confint(fit))

  data.frame(

    B=round(valueB,3),

    Wald=round(wald,3),

    OR_with_CI=paste(round(valueOR,3),"(",

                     round(confitOR[,1],3),"~",round(confitOR[,2],3),")",sep=""),

    P=format.pval(p,digits = 3,eps=0.001)

  )

}

formatFit(fit1)#得出OR值

结果解释:OR=0.304,因此sex=2的死亡风险更低。

  1. 亚组分析如何计算

那么,为了进一步探讨,不同年龄组的性别和死亡的关系,我们需要将人群按照年龄组分为60岁以下和60岁以上两组,分别建立两个模型:

60岁以下:Logit(p)=β1sex+β3ph.ecog+β4wt.loss+残差

60岁以上:Logit(p)=β1sex+β3ph.ecog+β4wt.loss+残差

这时候模型中就去掉了age这个变量,然后会得到两个β1,这其实就是亚组分析,也叫分层分析。

R语言代码:

#亚组分析

data1<-subset(data,age>60)

data2<-subset(data,age<=60)

#60岁以上

fit2 <- glm(status~sex+ph.ecog+wt.loss,data=data1,family = "binomial")

#60岁以下

fit3 <- glm(status~sex+ph.ecog+wt.loss,data=data2,family = "binomial")

formatFit(fit2)

formatFit(fit3)

结果解释:OR=0.284和0.309,因此60岁以上和60岁以下,sex=2的死亡风险均更低。

(2)P交互作用的计算方法

那么OR=0.284和0.309,两者相等吗?这时候就需要计算P交互值了。

P交互值的计算方法有两种,一种是传统方法,一种是似然比检验。

  1. 传统方法:在模型中加入主要解释变量和亚组变量的交互项,交互项的P值即为P交互,本例的模型如下:

Logit(p)=β1sex+β2age+β3sex*age+β4ph.ecog+β5wt.loss+残差

β3的P值即为P交互。

  1. 似然比检验:步骤有三步

步骤1:建立有交互的模型,即Logit(p)=β1sex+β2age+β3sex*age+β4ph.ecog+β5wt.loss+残差

步骤2:建立无交互的模型,即Logit(p)=β1sex+β2age+β3ph.ecog+β4wt.loss+残差

步骤3:比较这个模型差异,计算的P值即为P交互

若P交互<0.05,则说明OR=0.284和0.309在统计学上有差异,否则无差异。

下面分别给出线性模型、logistic模型、cox模型传统方法和似然比检验计算交互P的代码:

#模型1:线性模型

#有交互模型

fit1 <- glm(meal.cal~sex*age1+sex+age1+ph.ecog+wt.loss,data=data,family = "gaussian")

broom::tidy(fit1)

#无交互模型

fit2 <- glm(meal.cal~sex+age1+ph.ecog+wt.loss,data=data,family = "gaussian")

broom::tidy(fit2)

#似然比检验

anova(fit1,fit2,test="Chisq")

#模型2:logistic模型

# 有交互模型

fit1 <- glm(status~sex*age1+sex+age1+ph.ecog+wt.loss,data=data,family = "binomial")

broom::tidy(fit1)

#无交互模型

fit2 <- glm(status~sex+age1+ph.ecog+wt.loss,data=data,family = "binomial")

broom::tidy(fit2)

#似然比检验

anova(fit1,fit2,test="Chisq")

#模型3:Cox模型

# 有交互模型

fit1 <- coxph(Surv(time,status)~sex*age1+sex+age1+ph.ecog+wt.loss,data=data)

broom::tidy(fit1)

#无交互模型

fit2 <- coxph(Surv(time,status)~sex+age1+ph.ecog+wt.loss,data=data)

broom::tidy(fit2)

#似然比检验

anova(fit1,fit2,test="Chisq")

(3)P趋势如何计算

由于P趋势的计算要求自变量至少为三种,因此,这里研究目的改为年龄和死亡的关系。

首先将年龄划分为<50,50~60,60~70,70及以上四组。

然后首先将年龄设置为哑变量,建立以下模型:

Logit(p)=β1age12+β2age13+β3age14+β4sex++β5ph.ecog+β6wt.loss+残差

我们会得到β1、β2、β3三个参数估计值,然后进一步得出OR1、OR2、OR3.

R语言代码:

###########P趋势的计算

#年龄分组

data <- within(data,{

  age1[age<50]=1

  age1[age>=50 & age < 60] = 2

  age1[age>=60 & age < 70] = 3

  age1[age>= 70] = 4

})

#变因子

data$age1<-as.factor(data$age1)

#设参照

data$age1<-relevel(data$age1, ref="1")

#建立模型

fit1 <- glm(status~age1+sex+ph.ecog+wt.loss,data=data,family = "binomial")

broom::tidy(fit1)

formatFit(fit1)

OR分别为2.055、1.454、2.433,这三个值在统计学有没有趋势性变化呢?这时候就需要计算P趋势值了。

目前有两种方法计算P趋势,以本例为例子进行说明

(1)将age变量编码为1、2、3、4,作为等级变量纳入模型,计算出的P值就是P趋势,P趋势的方向是正向还是反向,可以看估计的β值或OR值

(2)先将age变量编码为1、2、3、4,然后计算每一组的中位数,本例计算的中位数为。。。。,因此将原来的1、2、3、4替换成。。。。/,再作为等级变量纳入模型,计算出的P值就是P趋势,P趋势的方向是正向还是反向,可以看估计的β值或OR值

R语言代码:

############方法1:age1变为等级变量

#age1变为数值

data$age1<-as.numeric(data$age1)

#建立模型

fit1 <- glm(status~age1+sex+ph.ecog+wt.loss,data=data,family = "binomial")

broom::tidy(fit1)

formatFit(fit1)

############方法2:age1各组的中位数变为等级变量

library(dplyr)

# median of groups

summarise(group_by(data,age1),

          min(age),

          max(age),

          mean(age),

          sd(age),

          median(age),

          quantile(age,0.25),

          quantile(age,0.75),

          )

#age的中位数:44,56,64,7

data$age2[data$age1 == 1]<- 44

data$age2[data$age1 == 2]<- 56

data$age2[data$age1 == 3]<- 64

data$age2[data$age1 == 4]<- 73

#建立模型

fit1 <- glm(status~age2+sex+ph.ecog+wt.loss,data=data,family = "binomial")

broom::tidy(fit1)

formatFit(fit1)

结果解释:P趋势值>0.05,因此不同年龄的死亡风险无趋势性变化。

这里可以发现两种做法结果不太一致,目前主流的做法基本是第2种做法,因此,小编建议大家参考第2种做法,当然第1种做法也没错。

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

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

相关文章

SNP干货分享:SAP数据脱敏的具体实施步骤

随着信息技术的飞速发展&#xff0c;大数据时代的到来使得数据成为国家经济、企业竞争力和个人隐私的重要载体。在这种背景下&#xff0c;数据安全问题日益凸显&#xff0c;各国政府纷纷出台相关法规以保护数据安全。我国也不断完善数据安全法规体系&#xff0c;以确保国家利益…

十分钟发布自己的NFT

概述 本文将以一个例子来说明如何在opensea快速发布自己的NFT智能合约&#xff08;ERC721&#xff09;。本着DRY&#xff08;Dont Repeat Yourself&#xff09;原则&#xff0c;我们需要站在巨人的肩膀上来搭建自己的应用&#xff0c;使用经过社区审计和实践检验的代码可以有效…

python统计分析——样本方差的分布

参考资料&#xff1a;用python动手学统计学 1、导入库 import numpy as np import pandas as pd import scipy as sp from scipy import statsfrom matplotlib import pyplot as plt import seaborn as sns 2、数据准备 建立一个平均数为4&#xff0c;标准差为0.8的正态分布…

腾讯云4核16G服务器价格,用于幻兽帕鲁Palworld专用

腾讯云幻兽帕鲁服务器4核16G、8核32G和16核64G配置可选&#xff0c;4核16G14M带宽66元一个月、277元3个月&#xff0c;8核32G22M配置115元1个月、345元3个月&#xff0c;16核64G35M配置580元年1个月、1740元3个月、6960元一年&#xff0c;腾讯云百科txybk.com分享腾讯云幻兽帕鲁…

自然语言处理 TF-IDF

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

Java强训day10(选择题编程题)

选择题 public class Test01 {public static void main(String[] args) {try{int i 100 / 0;System.out.print(i);}catch(Exception e){System.out.print(1);throw new RuntimeException();}finally{System.out.print(2);}System.out.print(3);} }编程题 题目1 import jav…

重构改善既有代码的设计-学习(六):处理继承关系

1、函数上移&#xff08;Pull Up Method&#xff09; 无论何时&#xff0c;只要系统内出现重复&#xff0c;你就会面临“修改其中一个却未能修改另一个”的风险。通常&#xff0c;找出重复也有一定的难度。 所以&#xff0c;某个函数在各个子类中的函数体都相同&#xff08;它们…

leetcode hot100跳跃游戏Ⅱ

本题和上一题还是有不一样的地方&#xff0c;这个题中&#xff0c;我们需要记录我们跳跃的步数并尽可能的满足最小的跳跃步数到达终点。 那么我们还是采用覆盖范围的概念&#xff0c;但是我们需要两个&#xff0c;一个是在当前位置的覆盖范围&#xff0c;另一个是下一步的覆盖…

Linux的 .bashrc 有什么作用?

一、.bashrc 是什么? 有什么用&#xff1f; .bashrc是一个存储在你的home目录下的隐藏文件&#xff0c;它用来配置和自定义你的终端环境和行为。 每次你启动一个新的终端时&#xff0c;.bashrc文件就会被执行&#xff0c;加载你设置的环境变量&#xff0c;别名&#xff0c;函数…

深度学习-自注意力机制

文字编码 one-hot编码&#xff0c;让模型自己去学习怎么进行编码 常见的输出 1.每个词都有一个输出值 2.每个句子输出一个值&#xff0c;情感分类 3.输入与输出长度不对应&#xff0c;翻译任务&#xff0c;生成任务。 RNN最早的语言处理 RNN解决的是模型去考虑前面的输入…

数字图像处理(实践篇)二十八 使用OpenCV Python中的K-means对图像进行颜色量化处理

目录 1 颜色量化 2 实践 在某些时候,不可避免的某些设备只能生成有限数量的颜色。因此需要执行颜色量化。选择使用cv2.kmeans()函数对颜色量化应用k-means聚类。 1 颜色量化 使用K-means聚类在图像中实现颜色量化的步骤如下: ① 导入依赖库

js实现动漫拼图2.0版

比较与1.0版&#xff0c;2.0版就更像与华容道类似的拼图游戏&#xff0c;从头到尾都只能控制白色块移动&#xff0c;而且打乱拼图和求助的实现与1.0都不相同 文章目录 1 实现效果2 实现思路2.1 打乱拼图2.2 求助功能2.3 判赢 3 代码实现 js实现动漫拼图1.0版 https://blog.csdn…

【千亿生意】一张眼底图,浮现你未来十年身体1000多种疾病风险

【千亿生意】一张眼底图&#xff0c;浮现你未来十年身体1000多种疾病风险 一眼看全身鹰瞳思路眼底看全身论文眼底成像技术眼底看肝脏眼底看多囊卵巢综合征眼底看肺部眼底看贫血眼底看少肌症眼底看神经退行眼底看心血管眼底看肾脏 鹰瞳视网膜论文 一眼看全身 眼病&#xff0c;是…

Redisson分布式锁介绍及实战应用(防止缓存击穿)

本地锁 浏览器把100w请求由网关随机往下传&#xff0c;在集群情况下&#xff0c;每台服务都放行10w请求过来&#xff0c;这时候每台服务都用的是本地锁是跨JVM的&#xff0c; 列如这些服务都没有49企业&#xff0c;此时有几个服务进行回原了打击在DB上面&#xff0c;那后期把这…

fastapi报错

初始化报错&#xff0c;非常低级错&#xff0c;扇自己10八张 app FastApi()

如何在Shopee越南站点进行有效的选品

在如今的电商市场中&#xff0c;选品是卖家们取得成功的关键之一。在Shopee越南站点进行选品时&#xff0c;卖家可以采取一些策略来提高产品的竞争力和销售业绩。本文将介绍一些有效的选品策略&#xff0c;帮助卖家在Shopee越南站点取得成功。 先给大家推荐一款shopee知虾数据…

算法沉淀——二分查找(leetcode真题剖析)

算法沉淀——二分查找 01.二分查找02.在排序数组中查找元素的第一个和最后一个位置03.搜索插入位置04.x 的平方根05.山脉数组的峰顶索引06.寻找峰值07.寻找旋转排序数组中的最小值08.LCR 173. 点名 二分查找&#xff08;Binary Search&#xff09;是一种在有序数组中查找特定元…

【服务器APP】利用HBuilder X把网页打包成APP

目录 &#x1f33a;1. 概述 &#x1f33c;1.1 新建项目 &#x1f33c;1.2 基础配置 &#x1f33c;1.3 图标配置 &#x1f33c;1.4 启动界面配置 &#x1f33c;1.5 模块配置 &#x1f33c;1.6 打包成APP &#x1f33a;1. 概述 探讨如何将网页转化为APP&#xff0c;这似乎…

【大厂AI课学习笔记】1.3 人工智能产业发展(1)

我国人工智能政策&#xff0c;分为5个阶段。从探索期&#xff0c;到后面的4个阶段。 MORE:&#xff08;以下为文心一言4.0的参考内容&#xff0c;和腾讯课程资料的分阶段&#xff0c;略有不同&#xff09; 我国的人工智能政策发展可以大致分为以下几个阶段&#xff0c;每个阶段…

网络防御安全知识(第三版)

配置黑洞路由 --- 黑洞路由即空接口路由&#xff0c;在NAT地址池中的地址&#xff0c;建议配置达到这个地址指 向空接口的路由&#xff0c;不然&#xff0c;在特定环境下会出现环路。&#xff08;主要针对地址池中的地址和出接口地址 不再同一个网段中的场景。&#xff09; …