从0开始学习R语言--Day13--混合效应与生存分析

news2025/7/21 0:49:03
混合效应模型(Mixed Effects Model)

对于数据来说,我们通常把所有样本共有的影响因素(性别,实验处理,实验方法),这种可以推广到总体的叫做固有效应,而仅适用于特定分组的(个体差异),叫做随机效应,混合效应模型就是用于处理既有固有效应又有随机效应的方法。

举一些具体点的例子,像同一个患者在一周内的血压数据,不同班级的学生成绩,不同地区的空气质量和查看对照实验的结果等,我们可以看到这些数据都有一些共同的特点,数据基本都有分组,且每个分组内的数据都有自己的特点,像学生成绩的固有效应就来自于考试的卷子难度,而随机效应既有学生的个体差异,也有师资差异,这需要我们在使用的时候有自己的判断。

下面我们举一个学生成绩的例子来举例:

set.seed(123)
n_students <- 100
n_classes <- 5

# 模拟数据(保持不变)
data <- data.frame(
  student_id = 1:n_students,
  class_id = sample(1:n_classes, n_students, replace = TRUE),
  teaching_method = sample(c("A", "B"), n_students, replace = TRUE),
  baseline_score = rnorm(n_students, mean = 70, sd = 10)
)

data$score <- with(data, 
                   baseline_score + 
                     ifelse(teaching_method == "A", 5, -2) +  # 固定效应
                     rnorm(n_classes, sd = 3)[class_id] +     # 随机效应(班级)
                     rnorm(n_students, sd = 2)                # 个体误差
)

# 拟合模型(添加错误处理)
tryCatch({
  model <- lmer(score ~ teaching_method + (1 | class_id), data = data)
  summary(model)
}, error = function(e) {
  message("lme4出错,改用nlme包:")
  library(nlme)
  model <- lme(score ~ teaching_method, random = ~ 1 | class_id, data = data)
  summary(model)
})

# 绘图(保持不变)
ggplot(data, aes(x = teaching_method, y = score, color = factor(class_id))) +
  geom_boxplot() +
  labs(title = "成绩按教学方法和班级分布", 
       x = "教学方法", 
       color = "班级") +
  theme_minimal()

输出:

Random effects:
 Formula: ~1 | class_id
        (Intercept) Residual
StdDev:    1.056784 11.59231

Fixed effects:  score ~ teaching_method 
                    Value Std.Error DF  t-value p-value
(Intercept)      75.44703  1.692050 94 44.58913   0e+00
teaching_methodB -7.93749  2.323873 94 -3.41563   9e-04

从输出可以看得出来,班级间的差异只有1.06,说明班级的分类对成绩的影响较小,而同一班级内不同学生的差异来到了11.59,说明成绩的变化主要来自于学生自己(比如有课外补习,下课有的人会勤快的问老师问题,有的学生特别聪明等);而从教学方法的p值可以看出,A教学方法对成绩的提升是最明显的,如果是研究不同老师的教学能力,可以将其纳入指标中(前提是控制学生群体相同),注意如果班级的数量大于5,即使随机效应里的标准差较小,最好也采用混合模型,因为班级数量太多的话,班级数量会呈现一定的结构,采用不同的模型可能会忽略层级结构的影响。

生存分析(Survival Analysis)

生存分析,很容易联想到是预测病人死亡的案例,事实上,确实是这样,生存分析是用来预测某个事件发生前的时间,像病人从治疗到死亡的时间,机器从使用到故障的时间,用户从注册到流失的时间等,反映出的核心问题是,在某个时间点,事件发生的概率是多少。

生存分析的关键在于从开始观察到事件发生的时间段内,是否发生了我们想要看到的事件,像预测病人死亡时,我们就会用到生存分析,但不一样的是,我们需要对数据进行筛选,就像生存分析的核心所说的,要筛选出符合所要事件的数据,当然了,这就跟指标有关了,比如在医学中常见的课题:患某类病的病人,在患有另一种病后死亡的概率,这种就需要筛选病人的药物,两种病的合并症,拿取的数据是否是在两类病发生中间的等等。而且,生存分析还可以利用缺少”结局“的数据,即如果病人还活着的数据,而不需要人为地赋予一个结局。

总而言之,通过生存分析,我们可以关注到是哪些因素影响到了事件发生的概率。

依然是通过一个例子来说明:

set.seed(123)
n <- 100
treatment <- sample(c("A", "B"), n, replace = TRUE)
data <- data.frame(
  patient_id = 1:n,
  treatment = treatment,
  age = rnorm(n, mean = 60, sd = 10),
  time_to_event = round(rexp(n, rate = ifelse(treatment == "A", 0.01, 0.02)) + 30),
  event = rbinom(n, 1, 0.8)
)

# 生存分析
surv_obj <- Surv(data$time_to_event, data$event)
fit <- survfit(surv_obj ~ treatment, data = data)

# 绘制生存曲线
ggsurvplot(fit, data = data, 
           pval = TRUE,          # 显示组间差异p值
           risk.table = TRUE,    # 显示风险表
           title = "生存曲线(治疗A vs B)")

# Cox模型(分析影响因素)
cox_model <- coxph(Surv(time_to_event, event) ~ treatment + age, data = data)
summary(cox_model)

输出:

Call:
coxph(formula = Surv(time_to_event, event) ~ treatment + age, 
    data = data)

  n= 100, number of events= 75 

                coef exp(coef)  se(coef)      z Pr(>|z|)    
treatmentB  1.012157  2.751528  0.266035  3.805 0.000142 ***
age        -0.007869  0.992162  0.012148 -0.648 0.517146    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

           exp(coef) exp(-coef) lower .95 upper .95
treatmentB    2.7515     0.3634    1.6335     4.635
age           0.9922     1.0079    0.9688     1.016

Concordance= 0.626  (se = 0.036 )
Likelihood ratio test= 14.09  on 2 df,   p=9e-04
Wald test            = 14.57  on 2 df,   p=7e-04
Score (logrank) test = 15.58  on 2 df,   p=4e-04

从输出我们可以看到,在100个样本数据中,有缺失数据的有25个。而通过观察年龄和治疗方案的输出,首先从三个检验值Likelihood ratio test,Wald test和Score test能看出模型整体是存在差异的,说明至少有一个预测变量起到了显著影响,而通过观察coef和p值,我们可以判断年龄对病人的生存时间没有太大影响,相反治疗方案的选择,在死亡风险上展示出了较大的差异。不过模型的C-index为0.626,接近于0.5,说明模型的解释力一般,要谨慎对待结果。

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

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

相关文章

基于mediapipe深度学习的虚拟画板系统python源码

目录 1.前言 2.算法运行效果图预览 3.算法运行软件版本 4.部分核心程序 5.算法仿真参数 6.算法理论概述 7.参考文献 8.算法完整程序工程 1.前言 虚拟画板系统基于计算机视觉与深度学习技术&#xff0c;通过摄像头捕获用户手部动作&#xff0c;利用 MediaPipe框架实现手…

复变函数 $w = z^2$ 的映射图像演示

复变函数 w z 2 w z^2 wz2 的映射图像演示 复变函数 w z 2 w z^2 wz2 是一个基本的二次函数&#xff0c;在复平面上具有有趣的映射性质。下面我将介绍这个函数的映射特性&#xff0c;并使用MATLAB进行可视化演示。 映射特性 极坐标表示&#xff1a;若 z r e i θ z …

Python实现P-PSO优化算法优化循环神经网络LSTM回归模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在当今数据驱动的时代&#xff0c;时间序列预测和回归分析是许多领域中不可或缺的技术手段。循环神经网络&#xff…

复合机器人:纠偏算法如何重塑工业精度与效率?

在智能制造领域&#xff0c;复合机器人正成为柔性生产与高精度作业的核心载体。面对“复合机器人有纠偏算法吗&#xff1f;”这一行业高频问题&#xff0c;富唯智能以多模态纠偏技术体系给出了答案——通过自研的AI驱动纠偏算法与多传感器融合方案&#xff0c;复合机器人不仅能…

审计- 1- 审计概述

1.财务报表审计的概念 财务报表审计是指注册会计师对财务报表是否不存在重大错报提供合理保证&#xff0c;以积极方式提出意见&#xff0c;增强除管理层之外的预期使用者对财务报表信赖的程度。 1.1 审计业务三方关系人 注册会计师对财务报表发表审计意见是注册会计师的责任管…

在MDK中自动部署LVGL,在stm32f407ZGT6移植LVGL-8.4,运行demo,显示label

在MDK中自动部署LVGL&#xff0c;在stm32f407ZGT6移植LVGL-8.4 一、硬件平台二、实现功能三、移植步骤1、下载LVGL-8.42、MDK中安装LVGL-8.43、配置RTE4、配置头文件 lv_conf_cmsis.h5、配置lv_port_disp_template 四、添加心跳相关文件1、在STM32CubeMX中配置TIM7的参数2、使能…

模块二:C++核心能力进阶(5篇) 篇一:《STL源码剖析:vector扩容策略与迭代器失效》

一、前言&#xff1a;重新认识vector的复杂性 在C开发者中&#xff0c;std::vector常被视为"动态数组"的简单实现&#xff0c;但其底层机制实则蕴含着深刻的工程智慧。本篇将通过&#xff1a; 多维度源码剖析&#xff08;GCC/Clang/MSVC三平台实现对比&#xff09;…

自动化立体仓库WCS的设计与实现

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。欢迎大家使用我们的仓储物流技术AI智能体。 新书《智能物流系统构成与技术实践》 新书《智能仓储项目出海-英语手册&#xff0c;必备&#xff01;》 完整版文件和更多学习资料&#xf…

UE5 2D地图曝光太亮怎么修改

UE5 2D地图曝光怎么修改 在场景添加后期处理体积 修改后期处理体积Exposure曝光参数最大值最小值都改为0 勾选Infinite Extend 全地图范围应用此后期处理体积

C# 类和继承(基类访问)

基类访问 如果派生类必须访问被隐藏的继承成员&#xff0c;可以使用基类访问&#xff08;base access&#xff09;表达式。基类 访问表达式由关键字base后面跟着一个点和成员的名称组成&#xff0c;如下所示&#xff1a; 例如&#xff0c;在下面的代码中&#xff0c;派生类Oth…

帕金森带来的生活困境

当这种健康状况出现&#xff0c;行动不再自如成为最明显的改变。日常行走时&#xff0c;步伐会逐渐变小、变慢&#xff0c;甚至会出现 “小碎步” 往前冲&#xff0c;难以停下&#xff0c;简单的起身、转身都可能变得艰难。手部也会不受控制地颤抖&#xff0c;拿水杯、系纽扣这…

Redis最佳实践——性能优化技巧之Pipeline 批量操作

Redis Pipeline批量操作在电商应用中的性能优化技巧 一、Pipeline核心原理与性能优势 1. 工作机制对比&#xff1a; sequenceDiagramtitle 常规请求 vs Pipeline请求# 常规模式Client->>Redis: 命令1Redis-->>Client: 响应1Client->>Redis: 命令2Redis--&g…

win32相关(虚拟内存和物理内存)

虚拟内存和物理内存 在win32操作系统下&#xff0c;每个进程都有它自己独立的4GB空间&#xff0c;是window给它分配的一个虚拟空间&#xff0c;并不是真正的物理空间&#xff0c;这4GB空间中&#xff0c;分为高2G和低2G&#xff0c;高2G是应用程序的&#xff0c;低2G空间是给内…

Linux操作系统安全管理概述与命令操作

前言&#xff1a; 1.本文将详细描述让读者了解Linux操作系统安全管理的概述和SELinux安全上下文以及基础操作命令&#xff1b; 2.本文将让读者掌握Linux操作系统防火墙firewall的结构和命令使用方法&#xff1b; 3.了解Iptables防火墙配置的结构与特点以及…

《操作系统真相还原》——中断

可以毫不夸张的说&#xff0c;操作系统离不开中断 此时我们将中断处理程序放在了汇编文件中了&#xff0c;很显然我们不能很方便的编写中断处理程序&#xff0c;不如在汇编程序里调用c函数。 在这个感觉过可以在c语言中直接内联汇编完成这些。 定时器 将时钟中断的频率提高后…

[yolov11改进系列]基于yolov11引入特征融合注意网络FFA-Net的python源码+训练源码

【FFA-Net介绍】 北大和北航联合提出的FFA-net: Feature Fusion Attention Network for Single Image Dehazing图像增强去雾网络&#xff0c;该网络的主要思想是利用特征融合注意力网络&#xff08;Feature Fusion Attention Network&#xff09;直接恢复无雾图像&#xff0c;…

助力活力生活的饮食营养指南

日常生活中&#xff0c;想要维持良好的身体状态&#xff0c;合理的营养补充至关重要。对于易受身体变化困扰的人群来说&#xff0c;更需要从饮食中摄取充足养分。​ 蛋白质是身体的重要 “建筑材料”&#xff0c;鱼肉、鸡肉、豆类制品富含优质蛋白&#xff0c;易于消化吸收&am…

pikachu通关教程-File Inclusion

文件包含漏洞 本地文件包含 http://127.0.0.1:1000/pikachu/vul/fileinclude/fi_local.php?filenamefile1.php&submit%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2 首先我们把file1改成file2&#xff0c;发现切换成功 那我们可不可以上传本地文件呢&#xff0c;答案是肯定的&a…

《机器学习数学基础》补充资料:韩信点兵与拉格朗日插值法

本文作者&#xff1a;卓永鸿 19世纪的伟大数学家高斯&#xff0c;他对自己做的数学有非常高的要求&#xff0c;未臻完美不轻易发表。于是经常有这样的情况&#xff1a;其他也很厉害的数学家提出自己的工作&#xff0c;高斯便拿出自己的文章说他一二十年前就做出来了&#xff0…

Spring Boot中保存前端上传的图片

在Spring Boot中保存前端上传的图片可以通过以下步骤实现&#xff1a; 1. 添加依赖 确保在pom.xml中已包含Spring Web依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifact…