【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语言进行统计分析,这对于临床分析至关重要,当然现在不断有新的包出现来解决统计的计算,后续也会更新新包的用法教程,有什么问题欢迎一起讨论交流。 

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

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

相关文章

【力扣题】关于单链表和数组习题

&#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;python从入门到精通&#xff0c;魔法指针&#xff0c;进阶C&#xff0c;C语言&#xff0c;C语言题集&#xff0c;C语言实现游戏&#x1f448; 希望得到您的订阅和支持~ &#x1f4a1; 坚持创作博文…

(Java)数据结构——图(第五节)Kruskal的实现最小生成树(MST)

前言 本博客是博主用于复习数据结构以及算法的博客&#xff0c;如果疏忽出现错误&#xff0c;还望各位指正。 Kruskal算法&#xff08;Kruskal的实现原理&#xff09; Kruskal算法的原理&#xff1a; 就是每次取最小的边&#xff0c;看看是不是与已经选择的构成回路&#x…

金融机构面临的主要AI威胁:身份伪造统与社会工程攻击

目录 攻击者利用AI威胁的过程 金融机构如何防范AI攻击 针对AI欺诈的解决方案 2023年11月&#xff0c;诈骗分子伪装成某科技公司郭先生的好友&#xff0c;骗取430万元&#xff1b;2023年12月&#xff0c;一名留学生父母收到孩子“被绑架”的勒索视频&#xff0c;被索要500万元赎…

ISTQB选择国内版,还是国际版呢

1, ISTQB简介 ISTQB&#xff08;International Software Testing Qualifications Board&#xff09;是一个国际软件测试资格认证机构&#xff0c;旨在提供一个统一的软件测试认证标准。ISTQB成立于2002年&#xff0c;是非盈利性的组织&#xff0c;由世界各地的国家或地区软件测…

Qt5 编译oracle数据库

库文件 1、Qt源码目录&#xff1a;D:\Qt5\5.15.2\Src\qtbase\src\plugins\sqldrivers\oci 2、oracle客户端SDK: https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html 下载各版本中的如下压缩包&#xff0c;一定要版本相同的 将两个压缩包…

事务,MySQL函数和索引详解

文章目录 事务简介提交方式手动提交事务 事务执行流程修改事务的默认提交方式 事务原理四大特性隔离级别 MySQL函数常见的日期函数判断函数case when字符串函数数字函数 MySQL性能(了解)索引概念分类MySQL索引语法数据结构(了解)BTreeBTree好处 优缺点优势劣势 创建原则 事务简…

c++取经之路(其五)——类和对象拷贝构造函数

概念&#xff1a;拷贝构造函数&#xff0c;只有单个形参&#xff0c;该形参是对本类类型对象的引用(一般常用const修饰)&#xff0c;在用已存在的类类型对象创建新对象时由编译器自动调用。 特征&#xff1a; 1. 拷贝构造函数是构造函数的一个重载形式 如&#xff1a; 2. 拷贝…

基于springboot实现中小型医院网站管理系统【项目源码+论文说明】

基于springboot实现中小型医院网站管理系统演示 摘要 本基于Spring Boot的中小型医院网站设计目标是实现用户网络预约挂号的功能&#xff0c;同时提高医院管理效率&#xff0c;更好的为广大用户服务。 本文重点阐述了中小型医院网站的开发过程&#xff0c;以实际运用为开发背…

[数据结构]——二叉树——堆的实现

1. 堆的概念及结构 如果有一个关键码的集合K { &#xff0c; &#xff0c; &#xff0c;…&#xff0c; }&#xff0c;把它的所有元素按完全二叉树的顺序存储方式存储 在一个一维数组中&#xff0c;并满足&#xff1a; < 且 < ( > 且 > ) i 0&#xff0c;1&…

rocky9 yum 安装与配置MySQL8

1.前置条件&#xff1a; 把yum包更新到最新 [rootlocalhost ~]# yum update 查看系统中是否已安装 MySQL 服务 rpm -qa|grep mysql 如果有安装mysql,则需要先卸载之前安装的mysql&#xff1a;yum -y remove mysql 然后再查看mysql是否都卸载完成,如果还有没卸载完成的&am…

小程序开发SSL证书下载和安装

在开发小程序时&#xff0c;确保数据的安全传输至关重要&#xff0c;而实现这一目标的关键在于正确获取与安装SSL证书。以下详细介绍了从获取到安装SSL证书的完整流程&#xff0c;以助您为小程序构建可靠的加密通信环境。 一、小程序SSL证书类型选择&#xff1a; 域名验证型D…

Linux:软件包管理器 - yum

Linux&#xff1a;软件包管理器 - yum Linux的软件安装方式源代码安装rpm包安装yum安装 yum三板斧yum listyum installyum remove yum生态yum源 Linux的软件安装方式 源代码安装 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序 源代码安…

git知识

如何将develop分支合并到master分支 #简单版 git checkout master git pull origin master git merge origin/develop # 解决可能的冲突并提交 git push origin master#复杂版 git checkout master # 拉取远程 master 分支的最新代码并合并到本地 git pull origin master # 拉…

新时代·高质量·硬道理丨开放的大门越开越大、开放的水平越来越高

新时代下&#xff0c;中国坚定不移地实施扩大高水平对外开放战略&#xff0c;致力于构建更高层次、更宽领域的开放型经济体系。以下是对新时代高质量硬道理这一主题下&#xff0c;中国开放大门越开越大、开放水平越来越高的几个关键点分析&#xff1a; 全方位开放格局 政府工…

YOLOv8打印模型结构配置信息并查看网络模型详细参数:参数量、计算量(GFLOPS)

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

计算机基础知识-第7章-程序的本质(2)——算法与数据结构概论

一、算法数据结构程序 提出这一公式并以此作为其一本专著的书名的瑞士计算机科学家尼克劳斯沃思&#xff08;Niklaus Wirth&#xff09;由于发明了多种影响深远的程序设计语言&#xff0c;并提出结构化程序设计这一革命性概念而获得了1984年的图灵奖。他是至今惟一获此殊荣的瑞…

【Linux杂货铺】文件系统

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 硬盘 &#x1f4c2; 物理结构 &#x1f4c2; 存储结构 &#x1f4c2; CHS定址法 &#x1f4c2; 操作系统对硬盘的管理和抽象 &#x1f4c1; 文件系统 &#x1f4c2; 分区 &#x1f4c2; 分组 &#x1f4c2; inode号 分配…

1113. 红与黑--Flood Fill 算法

目录 1113. 红与黑--Flood Fill 算法---宽搜&#xff08;BFS&#xff09; 输入格式 输出格式 数据范围 输入样例&#xff1a; 输出样例&#xff1a; 思路&#xff1a; 代码&#xff1a; 运行结果&#xff1a; 1113. 红与黑--Flood Fill 算法---宽搜&#xff08;BFS&am…

股票价格预测 | Python股票价格数据导入和处理

文章目录 文章概述代码设计导入处理文章概述 股票价格预测 | Python股票价格数据导入和处理 代码设计 导入 import os import numpy as np import csv import pandas as pd import matplotlib.pyplot

python入门(一)配置环境和选择IDE

Python&#xff0c;作为一种简洁易懂的编程语言&#xff0c;近年来在全球范围内受到了广泛的关注和追捧。它不仅语法简单明了&#xff0c;易于上手&#xff0c;而且拥有强大的第三方库和广泛的应用领域。从数据分析、机器学习到Web开发&#xff0c;Python都能发挥出色的性能&am…