两均值比较R

1. 两个均值比较校验

1.1 两独立样本均值检验

1.1.1 检验理论依据

两样本均值差: \(\bar{x}_1-\bar{x}_2\)

两总体均值差: \(\mu_1 - \mu_2\)

则两样本均值差服从正态分布:

\[\overline{x}_1-\overline{x}_2\sim N(\mu_1-\mu_2,\sigma_{\overline{x}_1-\overline{x}_2}^2) \]

当两总体方差 \(\sigma^2_1\)\(\sigma^2_2\) 未知,而经验可知相等,则方差\(\sigma_{\bar{x}_1-\bar{x}_2}^2\)的理论估计为:

\[\sigma_{\bar{x}_1-\bar{x}_2}^2=\frac{S_p}{n_1}+\frac{S_p}{n_2} \]

其中合并的方差为\(S_p=\frac{(n_1-1)S_1^2+(n_2-1)S_2^2}{n_1+n_2-2}\)

当两总体方差 \(\sigma^2_1\)\(\sigma^2_2\) 未知,而不相等时,则方差\(\sigma_{\bar{x}_1-\bar{x}_2}^2\)的理论估计为:

\[\sigma_{\bar{x}_1-\bar{x}_2}^2=\frac{S_1^2}{n_1}+\frac{S_2^2}{n_2} \]

其中,\(n_1\)\(n_2\)分别为两样本的样本量,\(S_1^2\)\(S_2^2\)分别为两样本的样本方差。

1.1.2 原假设和统计量

原假设:两总体均值之差为0,即总体均值无显著差异。

检验的统计量

\[z=\frac{\overline{x}_1-\overline{x}_2}{\sigma_{\overline{x}_1-\overline{x}_2}} \]

服从标准正态分布. (均值为0,被方差归一化)

由于只能得到方差的理论估计值,检验的统计量

\[t=\frac{\overline{x}_1-\overline{x}_2}{\sigma_{\overline{x}_1-\overline{x}_2}} \]

当方差未知但相等,t统计量服从 \(n_1+n_2-2\)个自由度的t分布

当总体方差未知而且不相等,Wehch提出仍然采用

\[\frac{\overline{x}_1-\overline{x}_2}{\sigma_{\overline{x}_1-\overline{x}_2}} \]

作为统计量,称为t化统计量。但是并不服从前述自由度的统计分布,t化统计量服从t分布的自由度为

\[df=\frac{\left(\frac{S_1^2}{n_1}+\frac{S_2^2}{n_2}\right)^2}{\frac{\left(\frac{S_1^2}{n_1}\right)^2}{n_1-1}+\frac{\left(\frac{S_2^2}{n_2}\right)^2}{n_2-1}} \]

1.1.3 方差检验

应该采用哪个分析,取决于两总体的方差是否相对(齐性),对此,可以采用F检验(正态分布假设),或者levene‘s 方差同质性检验。

levene’s方差同质性检验的原假设是两总体方差无显著差异。levene’s方法主要借助单因素方差分析方法来实现,其主要思路是:

  • 对来自两个不同总体的两个样本分别计算样本均值。
  • 计算各观测与本组样本均值差的绝对值,得到两个绝对离差样本。
  • 利用单因素方差分析方法,依据F统计量的观测值和概率p值判断两组绝对离差的均值是否存在显著差异,即判断两组的平均绝对离差是否存在显著差异。若无显著差异则表明两总体方差齐性;反之,则相反。

1.1.4 检验R语言代码

(1). t检验-等方差
x1=c(1,2,3)
x2=c(1.5,2.5,3.5)

t.test(x1,x2,var.equal = TRUE)


结果

Two Sample t-test

data:  x1 and x2
t = -0.61237, df = 4, p-value = 0.5734
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -2.766958  1.766958
sample estimates:
mean of x mean of y 
      2.0       2.5
(2)t密度函数
# 自由度
df = 4

# 计算密度函数值
x = seq(-4, 4, length = 100)
y = dt(x, df)

# 绘制曲线
plot(x, y, type = "l", main = paste("自由度为", df, "的T分布密度函数"), xlab = "值", ylab = "密度")

image-20241228234005842
(3)t检验-不等方差
x1=c(1,2,3)
x2=c(1.5,2.5,3.5)

t.test(x1,x2)

结果


Welch Two Sample t-test

data:  x1 and x2
t = -0.61237, df = 4, p-value = 0.5734
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -2.766958  1.766958
sample estimates:
mean of x mean of y 
      2.0       2.5

(4)levene 检查

x1=c(1,2,3)
x2=c(1.5,2.5,3.5)

library("car")

leveneTest(x1,x2, center=mean)

结果

Warning message in leveneTest.default(x1, x2, center = mean):

1.2 两配对样本均值检验

1.2.1 检验理论依据

两配对样本均值检验的理论依据是样本均值的抽样分布。 由于配对样本的各观测具有一一对应关系,因此可将两个样本以观测为依据作差,得到差值样本,并检验差值样本的均值与零是否有显著差异。

  • 若差值样本的均值与零有显著差异,则可以认为配对样本来自的两个总体的均值差在统计上显著。

  • 反之,若差值样本的均值与零无显著差异,则可以认为配对样本来自的两个总体的均值差在统计上不显著。

所以,两配对样本的均值检验问题本质上是一个总体的均值检验问题,即用样本均值检验样本来自的总体均值是否为某个检验值。此时需关注样本均值的抽样分布。

若样本均值记为 x̄,总体均值记为 μ,总体方差记为 σ²,样本量记为 n,则样本均值服从正态分布,即 x̄~ N(μ, σ²/n)。

1.2.2 原假设和统计量

两配对样本均值检验的原假设为:两总体均值之差为零,差值样本来自的差值总体均值为零,也即两总体均值无显著差异。依据样本均值的抽样分布,检验统计量

\[z = \frac{\bar{x}}{\sigma / \sqrt{n}} \]

服从标准正态分布。因通常总体方差未知,故只能用样本方差 $$S^2$$ 作估计值。依据原假设,检验统计量为:

\[t = \frac{\bar{x}}{S / \sqrt{n}} \]

对于差值样本,检验统计量为

\[t = \frac{D}{S_D / \sqrt{n}} \]

其中,\(D\) 为差值样本的均值;\(S_D\) 为差值样本的样本标准差;\(n\)为样本量。\(t\) 统计量服从有 \(n - 1\)个自由度的 \(t\)分布。

1.1.3 检验R语言代码

# 定义数据
x1 = c(1, 2, 3)
x2 = c(1.5, 2.5, 3.5)

# 进行配对T检验
t.test(x1, x2, paired = TRUE)
Error in t.test.default(x1, x2, paired = TRUE): data are essentially constant
Traceback: 

# 你正在尝试进行配对T检验的数据几乎是常数。这意味着两个配对样本的值非常接近,或者它们之间的差异非常小。在# # 这种情况下,配对T检验可能无法提供有意义的统计结果。

1.3 单样本t检验

1.3.1 检验理论依据

单样本均值检验,即利用单个样本均值检验样本来的单个总体的均值是否为某个检验值\( \mu_{0}\)。正如两配对样本均值检验中阐述的,该检验的理论基础是样本均值的抽样分布,即

\[\bar{x} \sim N\left(\mu,\frac{\sigma^{2}}{n}\right) \]

\(\mu\)为总体均值。总体方差通常未知,在原假设下,检验统计量为:

\[t = \frac{\bar{x}-\mu_{0}}{S/\sqrt{n}} \]

1.3.2 检验R代码

格式

\[t.test(数值型向量名, mu = 检验值, alternative = 检验方向) \]

实例

x=c(1,2,3)
t.test(x,mu=3)

结果

	One Sample t-test

data:  x
t = -1.7321, df = 2, p-value = 0.2254
alternative hypothesis: true mean is not equal to 3
95 percent confidence interval:
 -0.4841377  4.4841377
sample estimates:
mean of x 
        2 

1.4 功效分析

1.4.1 概述

在假设检验中,可能犯两种类型的错误。

  • 一类是原假设为真但却错误地拒绝了,这类错误称为弃真错误,犯错的概率定义为显著性水平α。由此可知,若原假设为真并且接受了,则做出这一正确决策的概率为1 - α。
  • 另一类是原假设为假但却错误地接受了,这类错误称为取伪错误,犯错的概率定义为β。由此可知,若原假设为假并且拒绝了,则做出这一正确决策的概率为1 - β,1 - β称为统计功效。

首先,犯弃真错误和取伪错误的概率同时都较小是一种良好的愿望。事实上,这两者就像是一个跷跷板的两端,弃真错误概率α越小,取伪错误概率β就越大,统计功效1−β也就越低。取伪错误概率β越小,统计功效1−β越高,弃真错误概率α也就越大。可见,统计功效1−β与显著性水平α有关,显著性水平α是影响统计功效的因素之一。

其次,若事实上两总体的均值差异非常大,表现出两样本均值的差非常大,则两总体分布的重叠程度低。此时,即使弃真错误的概率不变,也很容易拒绝且正确拒绝两总体均值无显著差异这个错误的原假设,统计功效较高。所以,样本均值差的大小是影响统计功效的因素。进一步,由于样本均值差是一个绝对量,会受数据计量单位和数量级的影响。所以,找到一个可反映两总体分布重叠程度的相对指标更有意义。这个相对指标称为效应量或效应大小(effect size,ES)。效应量与分布重叠程度的对应关系已有表可查。可见,效应量是影响统计功效的主要因素。

再次,若事实上两总体的均值差异较大,则增大样本量会导致均值差的抽样分布的方差减小,使得检验统计量t的观测值增大,更易拒绝两总体均值无显著差异这个错误的原假设,此时统计功效较高。所以,样本量也是影响统计功效的因素。

综上,显著性水平α、样本量、效应量、统计功效这四者之间存在必然联系,给出其中的三个项值,一定可计算出剩余的一个项值。这为人们做更为丰富的研究提供了可能。

1.4.2 效应量

在样本均值检验的功效分析中,R采用Cohen提出的效应量的定义。两独立样本均值检验的效应量定义为:

\[ES = \frac{\vert \bar{x}_1 - \bar{x}_2 \vert}{\sqrt{\frac{S_1^2 + S_2^2}{2}}} \]

两配对样本均值检验的效应量定义为:

\[ES = \frac{\vert D \vert}{S_D} \]

单样本均值检验中的效应量定义为:

\[ES = \frac{\vert \bar{x} - \mu_0 \vert}{S} \]

其中,\(\mu_0\)为单样本均值检验的原假设值。根据Cohen的研究,此时的\(ES\)取0.2时效应量较小,取0.5时效应量中等,取0.8时效应量较大。

1.4.3 检验R代码

需要pwr包

样本量相同

pwr.t.test(d = 效应量, n = 样本量, sig.level = 显著性水平, power = 统计功效,
type = 检验类型, alternative = 检验方向)

样本量不同

pwr.t2n.test(d = 效应量, n1 = 样本量1, n2 = 样本量2, sig.level = 显著性水平, power = 统计功效, type = two.sample, alternative = 检验方向)`

附录A

附录B : Python 代码

B.1 两独立样本t检验

import numpy as np
from scipy import stats

x1 = np.array([1, 2, 3])
x2 = np.array([1.5, 2.5, 3.5])

t_stat, p_value = stats.ttest_ind(x1, x2, equal_var=True)
df = len(x1) + len(x2) - 2  # 自由度

# 计算均值
mean_x1 = np.mean(x1)
mean_x2 = np.mean(x2)

# 计算标准误差
se = np.sqrt(((len(x1)-1)*np.var(x1, ddof=1) + (len(x2)-1)*np.var(x2, ddof=1)) / df * (1/len(x1) + 1/len(x2)))

# 计算95%置信区间
ci_low = (mean_x1 - mean_x2) - stats.t.ppf(0.975, df) * se
ci_high = (mean_x1 - mean_x2) + stats.t.ppf(0.975, df) * se

# 输出结果
print("Two Sample t-test")
print("data:  x1 and x2")
print(f"t = {t_stat:.5f}, df = {df}, p-value = {p_value:.4f}")
print("alternative hypothesis: true difference in means is not equal to 0")
print(f"95 percent confidence interval:")
print(f" {ci_low:.6f}  {ci_high:.6f}")
print("sample estimates:")
print(f"mean of x mean of y ")
print(f"      {mean_x1:.1f}       {mean_x2:.1f}")

Two Sample t-test
data:  x1 and x2
t = -0.61237, df = 4, p-value = 0.5734
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -2.766958  1.766958
sample estimates:
mean of x mean of y 
      2.0       2.5

B.2 配对t检验

B.3 Levene检验

import numpy as np
from scipy import stats

# 定义数据
x1 = np.array([1, 2, 3])
x2 = np.array([1.5, 2.5, 3.5])

# 进行Levene检验
statistic, p_value = stats.levene(x1, x2)

# 打印结果
print(f"Levene检验统计量: {statistic}")
print(f"p值: {p_value}")

参考文献

posted @ 2024-12-29 03:59  redufa  阅读(214)  评论(0)    收藏  举报