【R语言从0到精通】-3-R统计分析(列联表、独立性检验、相关性检验、t检验)

上两次教程集中学习了R语言的基本知识,那么我们很多时候使用R语言是进行统计分析,因此对于生物信息学和统计科学来说,R语言提供了简单优雅的方式进行统计分析。教程参考《Rlearning》


3.1 描述性统计分析

3.1.1 载入数据集及summary函数

我们使用mtcars数据集,里面是一个不同信号汽车不同统计参数的矩阵:

data("mtcars")
coln <- c("mpg","hp","wt") #每加仑行驶数、马力、车重
mydata <- mtcars[coln]
head(mydata)

我们可以通过summary函数直接粗略查看一下各个列数据的统计值:

summary(mydata)

3.1.2 Hmisc包、pastect包、psych包

一些第三方包提供了优雅和快捷的统计分析,我们先安装及载入包:

install.packages("Hmisc")
install.packages("pastecs")
install.packages("psych")
library(Hmisc)
library(pastecs)
library(psych)

(1)Hmisc的describe函数计算描述性统计可以得到变量/观测值/缺失值/唯一值/及五个最大最小值/各分位数等详细信息

Hmisc::describe(mydata)

(2)pastecs包的stat.desc()函数计算复杂多样描述性统计量:

stat.desc(mydata)

(3)psych包的describe函数提供值域、偏度、峰度、标准误等信息:

psych::describe(mydata)

大家可以根据不同的需求选择不同的包实现简单统计计算。

3.1.3 分组统计计算 

在我们的很多统计分析中,变量是由很多不同组的数据组成的,因此不分组直接进行计算是不正确的,因此我们可以对不同组的描述性变量进行统计分析。我们的数据集中,有一个变量am是自动手动挡的分类变量,我们用这个变量进行演示:

(1)使用doBy包的summaryBy函数分组:

install.packages("doBy")
library(doBy)
doBy::summary_by(mpg+hp+wt~am,data = mtcars)

 (2)psych包分组计算:

psych::describeBy(mydata,list(am=mtcars$am))

这样得到的分组统计信息是更详细的

3.2 频数表和列联表

对于非连续型变量,比如名字或者性别,我们更关注的是总量或者分类总量,那我们就可以使用频数表或者列联表进行展示:我们使用临床数据集,关于风湿关节炎治疗的数据进行演示:

install.packages('vcd')
library(vcd)
head(Arthritis)

3.2.1 一维列联表

如果我们感兴趣某一个非连续变量,比如改善状况的统计:

(1)频数统计

tab1 <- with(Arthritis,table(Improved))
tab1

 

(2)占比统计:

tab2 <- prop.table(tab1)*100
tab2

 

3.2.2 二维列联表

(1)当我们想看不同分组变量在另一个非连续变量中的统计,我们可以使用二维列联表

tab3 <- xtabs(~ Treatment+Improved, data = Arthritis)
tab3

(2)计算边际频数及比例:

我们在医学使用列联表的时候,常常需要计算边际频数及其比例(1和2代表第一个变量或者第二个变量)

margin.table(tab3, 1)
prop.table(tab3, 1)

 

margin.table(tab3, 2)
prop.table(tab3, 2)

 

我们也可以计算总共的边际变量及其比例:

addmargins(tab3)
addmargins(prop.table(tab3))

 

这样我们可以看到明显改善患者里25%都是接受治疗的

(2)使用gmodels包进行精美二维列联表绘制:

install.packages('gmodels')
library(gmodels)
CrossTable(Arthritis$Treatment,Arthritis$Improved)

 

3.3 独立性检验

3.3.1 卡方检验

  使用chisq.test()函数可以对二维列联表的行列向量进行卡方独立性检验,我们以代码演示:

library(vcd)
mytable <- xtabs(~Treatment+Improved, data=Arthritis)
chisq.test(mytable)
mytable <- xtabs(~Improved+Sex, data=Arthritis)
chisq.test(mytable)

我们通过卡方检验可以获得变量之间是否存在关系,比如对于治疗方法和改善效果之间我们发现p-value远小于0.01,说明有关系,但是患者的性别和治疗效果之间并没有发现很明显的关系。

报错是因为计算发现有突出的样本,所以我们算出来的性别和治疗效果之间虽然大于0.05,但是不足够大。

3.3.2 Fisher精确检验

Fisher精确性检验,也称为Fisher's Exact Test,是一种统计学上用于检验两个分类变量之间是否相互独立的假设检验方法。这种检验特别适用于当数据呈现为2x2列联表(即四格表)的情形,并且在列联表的任何一栏中理论频数小于5时,传统的卡方检验可能不再适用,因为此时卡方检验的准确性会受到影响。Fisher精确性检验的基本原理是利用超几何分布来计算在给定边缘频率(即每一行和每一列的总频率)固定的情况下,观察到的频数分布出现的概率。如果这个概率值很小,我们就有理由拒绝原假设(通常指两个变量独立),从而认为两个变量之间存在某种关联性。值得注意的是,Fisher检验与卡方检验不同,它是一种确切概率法,能够提供真正的P值而不是一个近似值。因此,当数据不满足卡方检验的条件时,或者研究者希望得到一个更准确的结果时,Fisher检验是一个很好的选择。我们通过代码来实现:

library(vcd)
mytable <- xtabs(~Treatment+Improved, data=Arthritis)
fisher.test(mytable)
mytable <- xtabs(~Improved+Sex, data=Arthritis)
fisher.test(mytable)

我们发现得到了精确的p值,而且我们刚刚猜测不想关的性别和治疗的p-value变得比较大,因此我们有足够依据进行否定。

3.3.3 三变量独立性检验-Cochran-Mantel-Haenszel检验

Cochran-Mantel-Haenszel检验(简称CMH检验)是一种在统计学中用于处理分层数据的多变量测试方法,它主要用于检验多个层次上的变量间是否存在关联。这种方法尤其适用于当研究设计涉及多个分层因素时,例如在流行病学研究中,研究者可能会考虑性别、年龄组等多个分层变量来评估某一暴露因素与疾病之间的关联。CMH检验的原理在于计算一个综合优势比(Odds Ratio,OR),该优势比是在控制了所有分层变量后的暴露因子与疾病之间关系的度量。其基本步骤包括:首先设定原假设,即所有层的OR都等于1,表示暴露因子与疾病无关;接着,通过特定的公式计算CMH统计量,并据此得出P值以判断结果是否具有统计学意义。在实际应用中,CMH检验有助于减少由于分层变量导致的偏差,提高估计的准确性和可靠性。例如,在一项关于药物效果的研究中,研究人员可能会使用CMH检验来调整患者的年龄、性别等人口学特征,以确保所观察到的药物效果不是由这些变量引起的假象。

mytable <- xtabs(~Treatment+Improved+Sex, data=Arthritis)
mantelhaen.test(mytable)

得到治疗方法与改善在性别上并不独立。

3.4 相关性检验

我们可以先进行独立性检验后再仔细看看相关性:

library(vcd)
mytable <- xtabs(~Treatment+Improved, data=Arthritis)
assocstats(mytable)

 

3.4.1 Pearson、Spearman和Kendall相关

Pearson、Spearman 和 Kendall 都是用于衡量两个变量之间相关性程度的统计指标。

(1)Pearson相关系数是最常用的相关系数之一,主要用于度量两个连续型随机变量之间的线性相关程度。其值的范围是从-1到1,其中1表示完全正相关,-1表示完全负相关,而0表示没有线性关系。Pearson相关系数的计算公式基于两变量的协方差与各自标准差的乘积之比,适用于数据呈正态分布或接近正态分布的情况。

(2)Spearman等级相关系数则是一种非参数的相关性检验方法,它通过计算两个变量的秩次(即数据的排名顺序)之间的相关性来评估它们之间的关系。Spearman相关系数对异常值和数据分布形态不敏感,因此当数据不满足正态分布假设时,或者存在离群值时,使用Spearman相关系数更为合适。

(3)Kendall等级相关系数也是基于秩次的非参数相关性测量方法,它考虑了所有可能的配对数目,并通过比较每一对观测值的秩次一致性来计算相关系数。Kendall相关系数同样适用于非正态分布的数据,并且对异常值的影响较小。

(4)如果数据满足正态分布,可以使用Pearson相关系数;如果数据分布未知或不满足正态分布,或者存在异常值,那么可以考虑使用Spearman或Kendall相关系数。

# 生成模拟数据
set.seed(123)
x <- rnorm(100, mean = 50, sd = 10)
y <- 2 * x + rnorm(100, mean = 0, sd = 5)

# 计算Pearson相关系数
pearson_cor <- cor(x, y, method = "pearson")
print(paste("Pearson correlation coefficient:", pearson_cor))

# 计算Spearman相关系数
spearman_cor <- cor(x, y, method = "spearman")
print(paste("Spearman rank correlation coefficient:", spearman_cor))

# 计算Kendall相关系数
kendall_cor <- cor(x, y, method = "kendall")
print(paste("Kendall rank correlation coefficient:", kendall_cor))

这样我们就可以对数据集计算三个相关性系数:

3.4.2 偏相关

偏相关,也称为部分相关,是指在控制了其他变量影响的情况下,两个变量之间的相关性。这种分析方法允许研究者排除第三变量的干扰,从而更准确地估计目标变量间的直接关系。在统计学中,偏相关系数是通过回归分析得到的,具体地,它是通过将其他控制变量纳入回归模型后,所保留的两个变量间的相关系数。这个概念在处理多变量数据时尤为重要,因为它有助于识别和量化变量间的独立关联,而不是由于与其他变量的共线性而产生的虚假关联。

举个例子,如果我们想研究教育水平和收入水平之间的相关性,但同时知道工作经验也会影响收入,那么我们就可以通过计算偏相关系数来排除工作经验的影响,从而得到教育水平和收入之间更纯粹的关系。

偏相关系数通常用ρ表示,它的取值范围是-1到1。正值表示正相关,负值表示负相关,而数值的绝对大小则表示相关性的强度。值得注意的是,偏相关系数的解释与普通的相关系数类似,但它提供了一种在多变量情境下控制和分离变量效应的方法。

我们使用美国各州人口、收入等变量数据集进行演示:

states <- state.x77[, 1:6]
cov(states)
cor(states)
install.packages('ggm')
library(ggm)
colnames(states)
pcor(c(1,5,2,3,6),cov(states))

得到在控制2/3/6变量的情况下,1和5的偏相关系数也就是人口和谋杀率的相关性

3.4.3 相关性显著性检验

我们通过psych包进行计算

library(psych)
corr.test(states, use = 'complete')

可以得到一个相关性系数矩阵

3.5 t检验

T检验是一种统计方法,用于确定两组数据是否存在显著差异。这种方法特别适用于样本量较小的情况,比如少于30个样本。T检验可以帮助研究人员判断观察到的差异是否超出了偶然变异的范围,也就是说,它可以帮助确定差异是否具有统计学意义。

在进行T检验之前,需要确保数据满足一些前提条件,包括数据的正态性、独立性以及两组数据的方差相等。如果不满足这些条件,可能需要采用非参数检验方法,如Mann-Whitney U检验。

T检验可以分为单样本T检验、独立样本T检验和配对样本T检验三种类型。单样本T检验用于比较单个样本的均值与已知的总体均值是否有显著差异。独立样本T检验则用于比较两个独立样本组的均值是否有显著差异。配对样本T检验适用于比较同一组受试者在两种不同条件下的表现是否有显著差异。

T检验的结果通常以P值的形式呈现,P值小于事先设定的显著性水平(通常是0.05)时,我们认为两组数据之间存在显著差异。

3.5.1 独立样本t检验

独立样本t检验是一种统计方法,用于比较两组独立样本的平均数是否存在显著差异。这种检验通常在实验设计中使用,其中实验组和对照组的数据是相互独立的。独立样本t检验的基本前提是每组数据都来自正态分布的总体,并且两组的方差相等(即方差齐性)。

假设一个教育研究员想要测试一种新的教学方法对学生考试成绩的影响。他选择了两个班级的学生作为样本,其中一个班级采用传统教学方法(对照组),另一个班级采用新的教学方法(实验组)。在学期末,两个班级的学生都参加了同样的考试。研究员收集了两组学生的考试成绩,并希望了解新教学方法是否比传统教学方法更有效。

在这种情况下,研究员可以运用独立样本t检验来分析数据。他会计算出两个班级考试成绩的平均数,并检查这两个平均数是否存在显著差异。如果t检验的结果显示P值小于预先设定的显著性水平(例如0.05),那么研究员就可以得出结论,认为新教学方法与传统教学方法相比,在提高学生考试成绩方面有显著的差异。

需要注意的是,独立样本t检验只适用于两个独立样本组的比较,而不能用于配对样本(例如同一个学生在两种不同教学方法下的成绩比较)或单一样本(例如一个班级的成绩与理论上的全国平均水平比较)的情况。在这些情况下,应使用相应的配对样本t检验或单样本t检验。

library(MASS)
t.test(Prob ~ So, data = UScrime)

3.5.2 非独立样本t检验

sapply(UScrime[c("U1","U2")], function(x)(c(mean=mean(x),sd=sd(x))))
with(UScrime, t.test(U1, U2, paired=TRUE))

3.6 小结

本次教程,我们聚焦如何使用R语言进行统计分析,这对于临床分析至关重要,当然现在不断有新的包出现来解决统计的计算,后续也会更新新包的用法教程,有什么问题欢迎一起讨论交流。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【2024最新】微信公众号怎么开启留言功能

关注微信公众号&#xff1a;怒码少年&#xff0c;回复关键词【电子书】可以免费获取计算机相关电子书 本文首发于&#xff1a;原文阅读-wx公众号&#xff1a;怒码少年 大家好&#xff0c;我是小码。 微信公众号从18年开始&#xff0c;正式关闭了留言功能。自此以后新注册的公…

Spring Boot aop proceed方法小结

刚刚开通了一个公众号&#xff0c;会分享一些技术博客和自己觉得比较好的项目&#xff0c;同时会更新一些自己使用的工具和图书资料&#xff0c;后面会整理一些面试资料进行分享&#xff0c;觉得有兴趣的可以关注一下。 文章目录 前言实操代码揭晓答案 补充一点打完收工&#…

0基础学习SQL注入之万能账号密码(BUUctf例题-[极客大挑战 2019]EasySQL1)

做题 借助例题[极客大挑战 2019]EasySQL1来理解SQL注入中的万能账号密码。 我们现解题&#xff0c;解题过程中的知识点在后面都会说到。 打开网址&#xff0c;我们看到的是这个界面。根据题目提示应该是属于SQL注入类型的 1.寻找注入点&#xff0c;很明显&#xff0c;输入用…

数据结构:线性表————单链表专题

&#x1f308;个人主页&#xff1a;小新_- &#x1f388;个人座右铭&#xff1a;“成功者不是从不失败的人&#xff0c;而是从不放弃的人&#xff01;”&#x1f388; &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f3c6;所属专栏&#xff1…

纯小白蓝桥杯备赛笔记--DAY4(数学数据结构图论)

文章目录 数学质因数分解辗转相除法求最大公约数最小公倍数&#xff1a;快速幂乘法逆元费马小定理 逆元乘法逆元素数判定与埃式筛法朴素素数判定法埃式筛法 图论并查集T3:真题--合根植物DijkstraFloyd 基础算法递归&#xff0c;循环&#xff0c;前缀和&#xff0c;差分STL 数学…

数据分析案例(一):地区收入的PCA主成分分析

练习1 地区收入的PCA主成分分析 0.变量说明 1.导包操作 核心思路&#xff1a;导入基础数据操作库包&#xff0c;PCA、k-means 库包&#xff0c;数据可视化库包 import pandas as pd import numpy as np from sklearn.decomposition import PCA from sklearn.preprocessing i…

宝塔面板安装软件 提示需要[xxxMB]内存 强制不能安装

解决方法&#xff1a; 第一步&#xff1a; 编辑修改/www/server/panel/class/下的文件panelPlugin.py vi /www/server/panel/class/panelPlugin.py注释以下判断的内容&#xff1a; ## 第二步&#xff1a; 重启宝塔面板&#xff0c;然后安装即可 bash bt 1

HarmonyOS实战开发-如何实现对游戏实现基本控制。

介绍 本示例基于H5游戏&#xff0c;通过arkui的button实现对游戏实现基本控制&#xff0c;展示webview的JS注入与执行能力&#xff0c;及native应用与H5的通信能力。 本例的H5游戏页面&#xff0c;由https://yangyunhe369.github.io/h5-game-blockBreaker/ 提供 效果预览 使…

三子棋+迷宫

又水了一篇&#xff0c;嘿嘿不废话了&#xff0c;正文开始 文章目录 1.三子棋&#xff08;Tic-Tac-Toe&#xff09;游戏流程解析游戏设计游戏代码实现1. 包含头文件和定义全局变量2. 初始化游戏板3. 打印游戏板4. 玩家行动5. 检查胜利条件6. 主函数下面是完整的C语言代码 2.控…

Codeforces Round 521 (Div. 3)

目录 A. Frog Jumping B. Disturbed People C. Good Array D. Cutting Out E. Thematic Contests F1. Pictures with Kittens (easy version) F2. Pictures with Kittens (hard version) A. Frog Jumping 直接模拟即可注意数据范围需要开long long void solve(){LL a,…

LeetCode-5. 最长回文子串【字符串 动态规划】

LeetCode-5. 最长回文子串【字符串 动态规划】 题目描述&#xff1a;解题思路一&#xff1a;动态规划五部曲解题思路二&#xff1a;动态规划[版本二]解题思路三&#xff1a;0 题目描述&#xff1a; 给你一个字符串 s&#xff0c;找到 s 中最长的回文 子串 。 如果字符串的反序…

kubernetes应用的包管理工具---Helm的安装、部署、构建Helm Chart、分发

kubernetes应用的包管理工具—Helm的安装、部署、构建Helm Chart、分发 文章目录 kubernetes应用的包管理工具---Helm的安装、部署、构建Helm Chart、分发1. 引入Helm的原因1.1 没有使用Helm的部署1.2 使用Helm部署 2. Helm核心概念3. Helm架构3.1 V2版本3.2 V3版本 4. Helm安装…

品牌百度百科词条创建多少钱?

百度百科作为国内最具权威和影响力的知识型平台&#xff0c;吸引了无数品牌和企业争相入驻。一个品牌的百度百科词条&#xff0c;不仅是对品牌形象的一种提升&#xff0c;更是增加品牌曝光度、提高品牌知名度的重要途径。品牌百度百科词条创建多少钱&#xff0c;这成为了许多企…

基于SpringBoot+Vue的高校会议室预定管理系统(源码+文档+部署+讲解)

一.系统概述 伴随着我国社会的发展&#xff0c;人民生活质量日益提高。于是对系统进行规范而严格是十分有必要的&#xff0c;所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套高校会议室预订管理系统&#xff0c;帮助…

【电控笔记0】拉式转换与转移函数

概要 laplace&#xff1a;单输入单输出&#xff0c;线性系统 laplace 传递函数 总结

python+appium调@pytest.mark.parametrize返回missing 1 required positional argument:

出错描述&#xff1a; 1、在做pythonappium自动化测试时&#xff0c;使用装饰器pytest.mark.parametrize&#xff08;“参数”&#xff0c;[值1&#xff0c;值2&#xff0c;值3]&#xff09;&#xff0c;测试脚本执行返回test_xx() missing 1 required positional argument:“…

Mybatis generate xml 没有被覆盖

添加插件即可 <plugin type"org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>

ssm040安徽新华学院实验中心管理系统的设计与实现+jsp

实验中心管理系统 摘 要 本安徽新华学院实验中心管理系统的设计目标是实现安徽新华学院实验中心的信息化管理&#xff0c;提高管理效率&#xff0c;使得安徽新华学院实验中心管理工作规范化、科学化、高效化。 本文重点阐述了安徽新华学院实验中心管理系统的开发过程&#x…

libcurl 简单实用

LibCurl是一个开源的免费的多协议数据传输开源库&#xff0c;该框架具备跨平台性&#xff0c;开源免费&#xff0c;并提供了包括HTTP、FTP、SMTP、POP3等协议的功能&#xff0c;使用libcurl可以方便地进行网络数据传输操作&#xff0c;如发送HTTP请求、下载文件、发送电子邮件等…

蓝桥杯python速成

总写C&#xff0c;脑子一热&#xff0c;报了个Python&#xff08;有一点想锤死自己&#xff09;&#xff0c;临时抱佛脚了 1.list的插入删除 append extend insert&#xff08;在索引位插入99&#xff09;---忘记用法别慌&#xff0c;用help查询 remove&#xff08;去掉第一个3…