入门必学 | R语言数据的独立性,正态性及方差齐性检验

article/2025/8/18 18:37:00

参数分析的三大前提检验

  • 检验数据独立性的方法
    • Chisq检验
    • Fisher检验
    • Cochran-Mantel-Haenszel检验
  • 检验数据正态性的方法
    • shapiro.test函数
    • qqnorm函数
    • ksnormTest函数
    • lillie.test函数
    • ks.test函数
  • 方差齐性检验的方法
    • bartlett.test()检验
    • leveneTest ()检验
  • 完整代码

  参数检验-显著性等数据分析前,如何用R语言完成。首先考虑数据的独立性(卡方检验、Fisher检验、Cochran-Mantel-Haenszel检验),其次检验数据的正态性(shapiro.test) or (qqnorm)等和方差齐性(bartlett.test) or (leveneTest)。因为统计学中的t检验和方差分析等方法,必要条件是样本都来自正态或近似正态分布,只有符合条件,才能用该方法进一步检验各样本所属的总体参数的显著性差异;否则要改换其他非参数的方法进行检验。

检验数据独立性的方法

对于数据的独立性,除特殊情况外,一般情况下是默认符合的。当然,如果实在不放心,也可以利用独立性检验算法,主要方法有:卡方检验、Fisher检验、Cochran-Mantel-Haenszel检验。话不多说,直接上代码:

Chisq检验

# install.packages("vcd")
library(vcd) # 加载该R包主要是为了利用Arthritis这个数据集 (该R包自带的数据集)
#1
mytable1 <- table(Arthritis$Treatment,Arthritis$Improved)
chisq.test(mytable1)
#2
mytable2 <- table(Arthritis$Sex,Arthritis$Improved)
chisq.test(mytable2)

在这里插入图片描述
1.chisq.test函数中的参数p默认每个量的概率是1/length(mytable1),即所有概率都相等,是独立的。在这种情况下,检验的假设是总体概率是否等于p中的概率。这里结果是p-value值小于0.05,即Treatment与Improved是相关的,不是独立的;2.结果显示p-value值大于0.05,即Sex与Improved是独立不相关的,也就是药物没有性别差异。

Fisher检验

该方法的原理是边际固定的列联表中行和列是相互独立的。

#1
mytable1 <- xtabs(~Treatment+Improved,data=Arthritis)
fisher.test(mytable1)
#2
mytable2 <- xtabs(~Sex+Improved,data=Arthritis)
fisher.test(mytable2)

与上述结果相似,不再赘述
在这里插入图片描述

Cochran-Mantel-Haenszel检验

该检验方法的原理:两个名义变量在第三个变量每一个水平中都是独立的。因此,该检验方法需要三个变量。

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

在这里插入图片描述
p-value值非常小,说明药物治疗和改善情况在性别的每一个水平上不独立。需要注意的是,这里函数中的变量顺序很重要。

检验数据正态性的方法

主要的函数:shapiro.test、qqnorm、ksnormTest、lillie.test以及特殊的ks.test,以上几种函数都可以用于检验数据是否满足正态性。

  • H0: 样本所来自的总体分布服从正态分布,检验结果的 p-value > 0.05数据就是满足正态分布。

shapiro.test函数

注意 此种方法能够检验的样本大小必须在3和5000之间

set.seed(1);x <- rnorm(450) # 分号表示连续读取命令,rnorm表示生成符合正态分布的数值
shapiro.test(x) # 检验数据是否符合正态性
shapiro.test(runif(100, min = 2, max = 4)) # runif随机生成对应数量的数值,并直接检验其是否满足正态性

在这里插入图片描述
1.根据结果p-value > 0.05 ,接受原假设,即认为数据满足正态分布。
2.根据结果p-value < 0.05 ,拒绝原假设,即认为数据不满足正态分布。

qqnorm函数

主要是用于判断数据是否偏离正态分布的趋势线距离的一种图–QQ图

set.seed(1);x <- rnorm(450)
qqnorm(x);qqline(x) # 绘制qq图及添加趋势线来判断set.seed(2);x1 <- runif(100, min = 2, max = 4)
qqnorm(x1);qqline(x1)

1.第一种结果与上面shapiro.test函数得到的结果类似,数据基本位于趋势线上。
在这里插入图片描述
2.我们可以从图中看出,两端的值都偏离了,因此数据不太满足正态性。
在这里插入图片描述

ksnormTest函数

# install.packages("fBasics")
set.seed(1);x <- rnorm(450)
set.seed(2);x1 <- runif(100, min = 2, max = 4)
library(fBasics)
ksnormTest(x)
ksnormTest(x1)

得到结果,与方法一的结果一致
在这里插入图片描述

lillie.test函数

# install.packages("nortest")
set.seed(1);x <- rnorm(450)
set.seed(2);x1 <- runif(100, min = 2, max = 4)
library(nortest)
ksnormTest(x)
ksnormTest(x1)

在这里插入图片描述

ks.test函数

K-S检验检验单一样本是否来自某一特定分布。比如检验一组数据是否为正态分布。它的检验方法是以样本数据的累积频数分布与特定理论分布比较,若两者间的差距很小,则推论该样本取自某特定分布族。K-S检验的原假设和备择假设为:

  • H0: 样本所来自的总体分布服从某特定分布
  • H1: 样本所来自的总体分布不服从某特定分布

如果要检验数据是否满足正态分布,只要把特定分布设定为“正态分布”即可。用R语言进行K-S检验的代码如下:

set.seed(1);x <- rnorm(450)
set.seed(2);x1 <- runif(100, min = 2, max = 4)
ks.test(x,"pnorm") # norm表示正态分布,p表示概率
ks.test(x1,"pnorm")

在这里插入图片描述
1.根据结果p-value > 0.05,接受原假设,即认为x数据满足正态分布。
2.根据结果p-value < 0.05 ,拒绝原假设,即认为x1数据不满足正态分布。

Tips:

  • 大样本、已知总体均数和标准差,选择非参数检验-单样本KS检验比较好
  • 单样本K-S检验要求检验分布是连续的,而连续分布出现相同值的概率为0.如果是出现相同的,则连续分布的假设不成立,则该方法无法使用

方差齐性检验的方法

对于数据的方差齐性检验,通常可以使用bartlett.test()、及car包中的leveneTest()函数来进行。

bartlett.test()检验

该检验主要适用于正态分布数据

require(graphics)
# 对于单一变量
bartlett.test(count ~ spray, data = InsectSprays) # spray可以是多分组
# 方差齐性检验p-value大于0.05时为齐性,否则不齐# 对于多变量
data("ToothGrowth")
bartlett.test(len ~ interaction(supp,dose), data = ToothGrowth)
bartlett.test(len ~ dose, data = ToothGrowth)

Tips:对于有多个自变量的情况,我们需要运用interaction()函数来将多个自变量折叠为一个单一的变量用于表示不同变量因素之间的组合。如果不这么做的话,检验的自由度将会发生错误,进而导致我们得到错误的p值。
在这里插入图片描述

leveneTest ()检验

非正态分布与正态分布数据均适用

# install.packages("car")
library(car)
#leveneTest函数包含于car程序包中。对于单一的自变量:
leveneTest(count ~ spray, data = InsectSprays)
#多个自变量的情况,在这种方法中我们无需使用interaction函数,但是对于量化数值的解释变量时,需要用as.facter转化为因子变量
leveneTest(len ~ supp*dose, data = ToothGrowth)
leveneTest(len ~ supp*as.factor(dose), data = ToothGrowth)
#若不是数值型,则不需要进行转换
leveneTest(conformity ~ fcategory*partner.status, data=Moore)

在这里插入图片描述

完整代码

####################################
#数据的独立性、正态性、方差齐性检验
####################################
#数据的独立性检验
# 卡方检验
# install.packages("vcd")
library(vcd)
#1
mytable1 <- table(Arthritis$Treatment,Arthritis$Improved)
chisq.test(mytable1)
#2
mytable2 <- table(Arthritis$Sex,Arthritis$Improved)
chisq.test(mytable2)# Fisher检验
#1
mytable1 <- xtabs(~Treatment+Improved,data=Arthritis)
fisher.test(mytable1)
#2
mytable2 <- xtabs(~Sex+Improved,data=Arthritis)
fisher.test(mytable2)# Cochran-Mantel-Haenszel检验
mytable <- xtabs(~Treatment+Improved+Sex,Arthritis)
mantelhaen.test(mytable)#数据正态性检验
# shapiro.test
set.seed(1);x <- rnorm(450)
shapiro.test(x)
shapiro.test(runif(100, min = 2, max = 4))# qqnorm
x <- rnorm(450)
qqnorm(x);qqline(x)
set.seed(2);x1 <- runif(100, min = 2, max = 4)
qqnorm(x1);qqline(x1)# ksnormTest
# install.packages("fBasics")
set.seed(1);x <- rnorm(450)
set.seed(2);x1 <- runif(100, min = 2, max = 4)
library(fBasics)
ksnormTest(x)
ksnormTest(x1)# lillie.test
# install.packages("nortest")
set.seed(1);x <- rnorm(450)
set.seed(2);x1 <- runif(100, min = 2, max = 4)
library(nortest)
ksnormTest(x)
ksnormTest(x1)# 特殊的ks.test
set.seed(1);x <- rnorm(450)
set.seed(2);x1 <- runif(100, min = 2, max = 4)
ks.test(x,"pnorm")
ks.test(x1,"pnorm")#方差齐性检验
# bartlett.test()检验
require(graphics)
# 对于单一变量
bartlett.test(count ~ spray, data = InsectSprays) # spray可以是多分组
# 方差齐性检验p-value大于0.05时为齐性,否则不齐
data("ToothGrowth")
bartlett.test(len ~ interaction(supp,dose), data = ToothGrowth)
bartlett.test(len ~ dose, data = ToothGrowth)# leveneTest()检验
# install.packages("car")
library(car)
#leveneTest函数包含于car程序包中。对于单一的自变量:
leveneTest(count ~ spray, data = InsectSprays)
#多个自变量的情况,在这种方法中我们无需使用interaction函数,但是对于量化数值的解释变量时,需要用as.facter转化为因子变量
leveneTest(len ~ supp*dose, data = ToothGrowth)
leveneTest(len ~ supp*as.factor(dose), data = ToothGrowth)
#若不是数值型,则不需要进行转换
leveneTest(conformity ~ fcategory*partner.status, data=Moore)

参考链接:

  1. https://blog.csdn.net/weixin_44384631/article/details/107575050
  2. https://blog.csdn.net/u011253874/article/details/42683057

http://chatgpt.dhexx.cn/article/5iRS1DQs.shtml

相关文章

基于卡方的独立性检验

本文给出基于两种统计量的假设检验&#xff0c;来检验变量间是否独立--χ2与秩和。χ2越小说明越独立 假设检验 假设检验&#xff08;Test of Hypothesis&#xff09;又称为显著性检验&#xff08;Test of Ststistical Significance&#xff09;。 在抽样研究中&#xff0c;由于…

SPSS之双独立样本的T检验

双独立样本的T检验 是指在两个样本相互独立的前提下&#xff0c;检验两个样本的总体均数&#xff08;两个样本各自归属的总体的平均数&#xff0c;如果两样本均数不存在显著差异&#xff0c;那么可以认为两个样本来自同一个总体&#xff09;是否存在了显著性差异。它的零假设&…

概率论:相关性与独立性

文章目录 (一) X与Z是相关还是独立&#xff1f;(二) 相关性与独立性的关系1.相关性 (线性关系)相关系数 ρ X Y ρ_{XY} ρXY​ 2.独立性 (无任何关系)3.相关性与独立性的关系 (三) 独立可加性 (XY独立且同类型分布) (一) X与Z是相关还是独立&#xff1f; 1.二维正态分布&…

spss中有关独立样本T检验的详细介绍(包含操作过程和结果分析)

SPSS学习记录day2 写在前面&#xff1a; 在上一篇里我们介绍了SPSS软件中平均值和单样本T检验两种比较平均值的方法&#xff0c;今天来介绍剩下的几个比较平均值的检验操作 分析>比较平均值 3.独立样本T检验 独立样本T检验类似于单样本T检验&#xff0c;不过独立样本T检验…

R语言:独立性检验

R语言中的独立性检验包括&#xff1a;卡方检验、Fisher检验、Cochran-Mantel-Haenszel检验 原假设H0——没有发生 备择假设H1——发生了 p-value是在原假设为真 的情况下&#xff0c;得到的最大或超出所得到的检验统计量的概率 一般将p值定位到0.05。当p<0.05时&#xff0c;…

spss分析方法-多个独立样本检验(转载)

参数检验的前提是关于总体分布的假设成立&#xff0c;但很多情况下我们无法获得有关总体分布的相关信息。 非参数检验正是一类基于这种考虑&#xff0c;在总体方差未知或知道甚少的情况下&#xff0c;利用样本数据对总体分布形态等进行推断的方法。 多独立样本检验用于在总体分…

统计学——独立性与相关性检验

统计学(第6版) 贾俊平 读书笔记 第9章 分类数据分析 9.1 分类数据与χ2统计量 统计数据的类型有分类数据、顺序数据和数值型数据。分类数据是对事物进行分类的结果。例如在泰坦尼克号海难的例子中&#xff0c;船上共2208人&#xff0c;其中男性1738人&#xff0c;女性470人。…

独立性检验

本文给出基于两种统计量的假设检验&#xff0c;来检验变量间是否独立--χ2与秩和。χ2越小说明越独立。你可能会参考另一篇博客相关性检验。 假设检验 假设检验&#xff08;Test of Hypothesis&#xff09;又称为显著性检验&#xff08;Test of Ststistical Significance&#…

独立性和条件独立性测试方法

独立性和条件独立性测试方法[1] 独立和条件独立定义&#xff1a;两个变量X, Z是独立的&#xff0c;其中P(Zz)>0,有&#xff1a; ​ P ( X x , Z z ) P ( X x ) P ( Z z ) P(Xx, Zz)P(Xx)P(Zz) P(Xx,Zz)P(Xx)P(Zz) 给定变量集合S&#xff0c;X和Z条件独立&#xff0…

独立性检验的基本思想和初步应用

独立性检验的基本思想和初步应用 问题&#xff1a;数学家克里斯提娜每天从一家面包店买一块1000g的面包&#xff0c;并记录下买回的面包的实际质量&#xff0c;一年后这位数学家发现&#xff0c;所记录数据的均值为950个&#xff0c;于是克里斯提娜推断这家秒宝典的面包分量不足…

卡方独立性检验|卡方拟合性检验

目录 1.独立性检验 2.卡方拟合性检验 3.自定义卡方检验 4.P值是什么 5.原假设/备择假设 1.独立性检验 “独立性检验”验证从两个变量抽出的配对观察值组是否互相独立&#xff08;例如&#xff1a;每次都从A国和B国各抽一个人&#xff0c;看他们的反应是否与国籍无关&…

[18调剂]中科院信工所·哈工程联合实验室2018年招收硕士生

点击文末的阅读原文或者公众号界面左下角的调剂信息是计算机/软件等专业的所有调剂信息集合&#xff0c;会一直更新的。 “中科院信工所 哈工程联合实验室”由信工所和哈工程于2017年3月共同围绕国家信息安全重大战略需求而组建&#xff0c;7月8日正式揭牌&#xff08;http://…

信工所复试收集材料分享

文章目录 面试问题汇总一室&#xff1a;二室三室五室 英语面试汇总综合面试汇总常见综合问题【前沿知识】 面试问题汇总 http://www.cskaoyan.com/forum.php?modviewthread&tid654445&fromuid443063 栈和堆的区别&#xff1f;&#xff1a; 1、栈由编译器自动分配释放…

中科院信工所 考研面试经验贴

转载于王道论坛&#xff0c;原文作者为&#xff1a;kxkxssz 点击原文链接&#xff0c;可进入原帖。 我们是23号面试的&#xff0c;由于这次本人的分数卡着复试线进的&#xff0c;本着要作死就往大了作的态度&#xff0c;报了个人觉得胜算最小的六室。接下来是我们的流程1.体检&…

2019年中科院信工所夏令营考核内容

二室考核分四项 心理素质测试 专业笔试 英语面试 专业面试 心理素质测试 专业笔试 45min&#xff0c;至少分了3套卷&#xff0c;10个选择题&#xff0c;是专业课知识&#xff0c;数据结构、计算机网络为主&#xff0c;没有数学&#xff1a;给出前序和中序遍历&#xff0c;求后…

信工所复试(专业面)

原文请戳2022年中科院信工所二室考研杂记__Melody&#xff5e;的博客-CSDN博客 一&#xff0c;408复习&#xff1a; 一&#xff09;计算机网络 &#xff08;见专题文章计算机网络专题__Melody&#xff5e;的博客-CSDN博客&#xff09; 二&#xff09;数据结构 1&#xff0c…

2020保研夏令营之路——武大网安、北理计算机、中科院信工所六室

2020年夏令营就这么毫无体验感地开始了。。。各个学校都变成了线上面试。不过依照往年的面经来说&#xff0c;基本没有什么变化。鉴于我本人比较菜&#xff0c;只有成绩拿得出手的那种&#xff0c;所以跟我有同样情况的学弟学妹们可以找我交流交流&#xff01; 本人情况&#…

保研夏令营记录-上交清华深研院北大信工中科院自动化所

保研夏令营记录 个人基本情况前期准备上海交通大学 &#xff08;6月1号&#xff09;清华深研院&#xff08;7月5日-10日&#xff09;北大信工(7月10日-7月13日)中科院自动化所&#xff08;7月15日-7月19日&#xff09;关于九推 注&#xff1a;此帖所涉及的夏令营全部没有机试&a…

【中科院信工所】-2021考研经验-记录一段每天都在思考如何学习的日子

今天出了录取名单&#xff0c;二战上岸&#xff0c;突然觉得综艺&#xff0c;B站都好没意思&#xff0c;也不知道该干什么&#xff0c;索性记录一下备考的这段日子&#xff0c;碎碎念可能会很多&#xff0c;想看干货可以直接点标题阅读。 目录 基本情况 初试备考 数学一&#x…

【大咖说Ⅱ】中科院信工所研究员林政:大规模预训练语言模型压缩技术

欢迎来到2022 CCF BDCI大咖说系列专题报告 听顶级专家学者围绕特定技术领域或选题&#xff0c;讲述自身成果的研究价值与实际应用价值 便于广大技术发烧友、大赛参赛者吸收学术知识&#xff0c;强化深度学习 每周一、三、五&#xff0c;「大咖说」与你相约“一碗数据汤”~ 本…