当前位置: 首页 > article >正文

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

混合效应模型(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.59231Fixed 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 ‘ ’ 1exp(coef) exp(-coef) lower .95 upper .95
treatmentB    2.7515     0.3634    1.6335     4.635
age           0.9922     1.0079    0.9688     1.016Concordance= 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,说明模型的解释力一般,要谨慎对待结果。

相关文章:

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

混合效应模型&#xff08;Mixed Effects Model&#xff09; 对于数据来说&#xff0c;我们通常把所有样本共有的影响因素&#xff08;性别&#xff0c;实验处理&#xff0c;实验方法&#xff09;&#xff0c;这种可以推广到总体的叫做固有效应&#xff0c;而仅适用于特定分组的…...

基于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;…...

计算机组成原理核心剖析:CPU、存储、I/O 与总线系统全解

引言 在当今数字化时代&#xff0c;计算机已经渗透到我们生活的方方面面&#xff0c;从智能手机到超级计算机&#xff0c;从智能家居到自动驾驶汽车。然而&#xff0c;你是否曾好奇过&#xff0c;这些功能强大的设备内部究竟是如何工作的&#xff1f;是什么让计算机能够执行各种…...

数据分类分级的实践与反思:源自数据分析、治理与安全交叉视角的洞察

在数据安全体系的构建中&#xff0c;数据分类分级无疑扮演着基石性的角色&#xff0c;其系统性与复杂性对从业者提出了极高要求。尽管个人并非专注于该领域的研究专家&#xff0c;但凭借在数据分析、数据治理及数据安全策略应用交叉地带的长期实践与系统性认知&#xff0c;得以…...

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

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

百度蜘蛛池的作用是什么?技术@baidutopseo

百度蜘蛛池的作用 百度蜘蛛池是一种用于集中管理和调度百度搜索引擎蜘蛛&#xff08;爬虫&#xff09;的技术工具。其主要目的是优化网站内容的收录效率&#xff0c;帮助搜索引擎更高效地发现和抓取网页内容。技术baidutopseo 提升收录效率 通过集中大量百度蜘蛛的访问请求&…...

8.linux文件与文件夹内处理命令cp,mv,rm

cp 可以用于复制文件/文件夹 cp 【-r】 参数1 参数2 -r&#xff0c;用于复制文件夹使用&#xff0c;表示递归 mv 用于移动文件/文件夹&#xff0c;没有选项 参数2&#xff1a;表示移动去的地方&#xff0c;如果参数2不存在&#xff0c;则进行改名&#xff0c;保证目标存在…...

JavaScript性能优化:实战技巧提升10倍速度

JavaScript 性能优化实战技术文章大纲 基础优化策略 减少 DOM 操作&#xff1a;频繁的 DOM 操作会导致重绘和回流&#xff0c;影响性能。使用文档片段&#xff08;DocumentFragment&#xff09;或虚拟 DOM 技术优化批量操作。 避免全局变量污染&#xff1a;全局变量会增加内…...

核函数:解锁支持向量机的强大能力

在机器学习的世界中&#xff0c;支持向量机&#xff08;SVM&#xff09;是一种强大的分类算法&#xff0c;而核函数则是其背后的“魔法”&#xff0c;让 SVM 能够处理复杂的非线性问题。今天&#xff0c;我们就来深入探讨核函数的奥秘&#xff0c;看看它们是如何帮助 SVM 在高维…...

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;拿水杯、系纽扣这…...

集成测试的流程总结

首先我们的目的是进行自动化测试&#xff0c;也就是通过cl工具来对我们的项目用我们自己写的yaml文件中的命令来测试项目&#xff0c;这是我们的根本性目的&#xff0c;现在用github action cl工具以及maestro cli 云端作为例子通一遍流程。 首先用xcode创建我们的ios app应用程…...

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

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

Node.js 项目调试指南

Node.js 项目调试指南 &#x1f9ed; 一、调试工具和方式总览 方式难度场景说明console.log 调试★简单问题定位最常见&#xff0c;但效率低debug 模块★★模块化输出日志支持命名空间的调试日志VSCode 断点调试★★★跟踪函数调用、变量状态推荐使用node inspect / ndb★★★…...

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…...

【软件测试】测试框架(unittest/pytest)

本文介绍了Python 中最常用的两个测试框架&#xff1a;unittest 和 pytest&#xff0c;帮助你编写更规范、可维护的自动化测试用例。 一、unittest 框架 unittest 是 Python 内置的标准库&#xff0c;无需额外安装&#xff0c;适合初学者入门。它借鉴了 JUnit 的设计理念&…...

Kotlin 中 companion object 扩展函数详解

companion object 的扩展函数是 Kotlin 中一个强大但稍显复杂的特性&#xff0c;它允许你为类的伴随对象添加新的函数。下面我会通过清晰的示例和解释帮助你理解这个概念。 基本概念 扩展函数允许你为已有的类添加新函数&#xff0c;而无需继承或修改原始类。当这个扩展函数是…...

MySQL半同步复制配置和参数详解

目录 1 成功配置主从复制 2 加载插件 3 半同步复制监控 4 半同步复制参数 1 成功配置主从复制 操作步骤参考&#xff1a;https://blog.csdn.net/zyb378747350/article/details/148309545 2 加载插件 #主库上 MySQL 8.0.26 之前版本: mysql>INSTALL PLUGIN rpl_semi_syn…...

使用FastAPI构建车牌检测识别服务

概述 FastAPI FastAPI是一个现代的高性能 Web 框架,用于使用 Python 构建 API。它可以让开发者轻松快速高效地构建 API,同时提供 API 的自动验证、序列化和文档记录等功能,是构建 Web 服务和微服务的热门选择。 YOLO YOLO(YOLO(You Only Look Once)是一种流行的物体检…...