【R语言】t检验

一、基本介绍

t检验(t-test)是用于比较两个样本均值是否存在显著差异的一种统计方法。

t.test()函数的调用格式:

t.test(x, y=NULL, alternative=c("two.sided", "less", "greater"), mu=0, pair=FALSE, var.equal=FALSE, conf.level=0.95, ...)

参数详解:

  1. x:用于均值比较的数值向量。
  2. y:用于均值比较的数值向量。当y=NULL时,表示为单样本t检验。
  3. alternative:表示指定假设检验的备择检验类型。two.sided:双侧检验(默认);less:左侧检验(备择假设为样本均值小于mu);greater:右侧检验(备择假设为样本均值大于mu)。
  4. mu:一个对比用的数值,默认为0。当检验为单样本t检验时,表示x所代表的总体均值是否与mu中指定的值相等;当检验为双样本t检验时,表示x和y代表的总体均值之差是否与mu中指定的值相等。
  5. pair:逻辑值,指定是否为配对样本,默认为FALSE,即独立样本。
  6. var.equal:逻辑值,指定两个样本的方差是否相等(默认为TRUE,即假设方差相等;如果方差可能不相等,应设置为FALSE以执行Welch t检验)
  7. conf.level:置信区间的置信水平。

二、原假设与备择假设

在t检验中,原假设(null hypothesis,通常表示为H0​)和备择假设(alternative hypothesis,通常表示为H1​)是根据研究目的和所要检验的具体问题来设定的。

通常,原假设是希望被推翻的假设,而备择假设是研究者认为如果原假设被推翻则可能成立的假设。在进行t检验时,如果计算出的p值小于事先设定的显著性水平(如0.05)则可以拒绝原假设,接受备择假设(在统计上显著的意义上)。

1、单样本t检验

原假设:样本所来自的总体的均值等于某个已知值μ0​,即μ=μ0​。

备择假设:样本所来自的总体的均值不等于μ0​(双侧检验);或者小于μ0​(左侧检验);或者大于μ0​(右侧检验)。

2、独立样本t检验

原假设:样本所来自的总体的均值等于某个已知值μ0​,即μ=μ0​。

备择假设:样本所来自的总体的均值不等于μ0​(双侧检验);或者小于μ0​(左侧检验);或者大于μ0​(右侧检验)

3、非独立样本t检验

原假设:配对样本差值所来自的总体的均值等于0,即μd​=0(其中μd​表示配对样本差值的均值)。

备择假设:配对样本差值所来自的总体的均值不等于0(双侧检验);或者小于0(左侧检验,即认为第一种情况或测量值平均上小于第二种);或者大于0(右侧检验,即认为第一种情况或测量值平均上大于第二种)

三、单样本t检验

单样本t检验(One-Sample t-Test)用于比较一个样本的均值与已知的总体均值是否存在显著差异。

sample_data <- c(5.1, 4.8, 5.0, 5.3, 4.9)

# 总体均值
mu <- 5.0

# 执行单样本t检验
t.test(sample_data, mu = mu)

四、独立样本t检验

独立样本t检验(Independent Two-Sample t-Test)用于比较两个独立样本的均值是否存在显著差异。

group1 <- c(5.1, 4.8, 5.0, 5.3, 4.9)
group2 <- c(5.5, 5.2, 5.4, 5.6, 5.0)

# 执行独立样本t检验, 假设两组数据之间无差异
t.test(group1, group2, alternative="two.sided", var.equal = T)

 使用R语言中内置的数据集InsectSprays,检验杀虫剂C与杀虫剂D的效果差异。

head(InsectSprays)
library(dplyr)
# 筛选杀虫剂C和D
data1 <- dplyr::filter(InsectSprays, spray %in% c("C", "D"))
# 独立样本t检验:假设使用杀虫剂C后的昆虫数目比使用杀虫剂D后的少
t.test(count ~ spray, data1, alternative="less", var.equal=T)

从以下结果可知,使用杀虫剂C后的昆虫数目(2.08)显著(P=0.0027<0.05)小于使用杀虫剂D后的昆虫数目(4.917),即杀虫剂C的效果比D好。 

五、非独立样本t检验

非独立样本t检验又叫配对样本t检验。

下面用R语言内置的sleep数据集做演示:

现假设两种安眠药对增加睡眠时长的效果一样。

head(sleep)
t.test(extra ~ group, data = sleep, pair=TRUE, alternative="two.sided")

从下面结果可知,两种安眠药平均增加睡眠时长相差1.58小时,而且p=0.002833,远小于0.05,因此可以拒绝原假设,即这两种安眠药的效果不一样。 

需要注意的是,因为是进行的双侧t检验,所以可以假设“两种安眠药对增加睡眠时长的效果一样”。如果要假设“第1种安眠药的效果低于第2种安眠药的效果”,需要使用左侧检验,如下所示:

t.test(extra ~ group, data = sleep, pair=T, alternative="less")

原假设:两种安眠药的效果没有显著差异,或者第1种安眠药的效果不小于第2种。

备择假设:第1种安眠药的效果低于第2种安眠药的效果。

从下面结果可知,第1种安眠药效果确实显著低于第2种安眠药效果(p=0.0014)  

六、方差齐性检验

方差齐性检验(Equality of Variance Test)是指检验两个或两个以上样本的方差是否相等的统计检验方法。如果两个样本的方差相等,说明它们的变异情况相似,可以认为它们来自同一总体或具有可比性;反之,如果方差不相等,则可能说明它们的变异情况不相似,来自不同的总体或不具有可比性。

在t检验中,方差齐性是一个重要的前提假设,因为如果两个样本的方差差异显著,那么t检验的结果可能会受到严重影响,导致结论不准确。

在t检验中,进行方差齐性检验的目的是确保两个样本具有可比性。因为t检验是用于比较两个样本均值是否存在显著差异的统计方法,如果两个样本的方差差异显著,那么它们的均值比较可能就没有意义。因此,在进行t检验之前,通常需要先进行方差齐性检验

常用检验方法是Bartlett检验和Levene检验。

1、Bartlett检验

Bartlett检验对数据有一些假设,例如数据应该是来自正态分布的样本。

head(InsectSprays)
library(dplyr)
# 筛选杀虫剂C和D
data1 <- dplyr::filter(InsectSprays, spray %in% c("C", "D"))
# 对使用两种杀虫剂后的昆虫数目进行方差齐性检验
bartlett.test(count ~ spray, data1)

 如上结果所示:p值(0.4445)大于显著性水平(如0.05),则接受方差相等的零假设,认为各组的方差无显著差异。

# 三个组,每组有若干观测值
set.seed(1234)  # 设置随机种子以便结果可重复
group1 <- rnorm(30, mean = 5, sd = 2)
group2 <- rnorm(30, mean = 5, sd = 3)
group3 <- rnorm(30, mean = 5, sd = 4)

# 将数据组合成一个向量,并创建一个因子变量表示组别
data <- c(group1, group2, group3)
groups <- factor(rep(c("Group1", "Group2", "Group3"), each = 30))

# 执行Bartlett检验
bartlett_test_result <- bartlett.test(data ~ groups)
bartlett_test_result

如上结果所示:p值(0.0003752)小于显著性水平(如0.05),则拒绝方差相等的零假设,认为各组的方差有显著差异。

2、Levene检验

在R语言中,Levene检验是一种常用的方差齐性(homogeneity of variances)检验方法,尤其适用于数据不满足正态分布假设的情况。与Bartlett检验不同,Levene检验对数据的分布没有严格要求,因此在实际应用中更为广泛。

car包是包含Levene检验函数的一个常用包。

head(InsectSprays)
library(dplyr)
library(car)
# 筛选杀虫剂C和D
data1 <- dplyr::filter(InsectSprays, spray %in% c("C", "D"))
# 对使用两种杀虫剂后的昆虫数目进行方差齐性检验
leveneTest(count ~ spray, data1)

如上结果所示:p值(1)大于显著性水平(如0.05),则接受方差相等的零假设,认为各组的方差无差异。 

# 三个组,每组有若干观测值
set.seed(123)  # 设置随机种子以便结果可重复
group1 <- rnorm(30, mean = 5, sd = 2)
group2 <- rnorm(30, mean = 5, sd = 3)
group3 <- rnorm(30, mean = 5, sd = 4)

# 将数据组合成一个数据框
data <- data.frame(
  values = c(group1, group2, group3),
  group = factor(rep(c("Group1", "Group2", "Group3"), each = 30))
)

# 执行Levene检验
levene_test_result <- leveneTest(values ~ group, data = data)

# 得到结果
levene_test_result

 如上结果所示,p值(0.04275)小于显著性水平(如0.05),则拒绝方差相等的零假设,认为各组的方差有显著差异。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值