本文使用R语言对经典的鸢尾花数据集iris进行均值检验,检验不同类别鸢尾花的四个属性均值是否相等。数据集包含150个样本,分为三类:Setosa,Versicolor 和 Virginica,每个样本包含四个属性:萼片长度(Sepal.Length),萼片宽度(Sepal.width),花瓣长度(Petal.Length),花瓣宽度(Petal.width)。

我们将分别进行以下三个检验:

  1. 检验第一类鸢尾花Setosa的四个属性的均值是否等于给定的向量u0=(5.0,3.4,1.5,0.2)。

  2. 检验第一类鸢尾花Setosa的四个属性的均值是否等于第二类鸢尾花Versicolor的四个属性的均值,假设两类的协差阵不相等。

  3. 检验三类鸢尾花的四个属性的均值是否全部相等。

以下代码展示了具体计算步骤和结果:

1. 第一类鸢尾花Setosa的均值检验

# 加载iris数据集
data(iris)

# 提取Setosa样本
setosa <- subset(iris, Species == 'setosa')

# 计算四个属性的均值
u1 <- colMeans(setosa[, 1:4])
u1

输出结果为:

Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
   5.006       3.428       1.462       0.246 

计算四个属性的样本协差矩阵S1:

S1 <- cov(setosa[, 1:4])
S1

输出结果为:

          Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length   0.124249    0.100298    0.016139    0.010149
Sepal.Width    0.100298    0.145180    0.011682    0.011436
Petal.Length   0.016139    0.011682    0.030106    0.005698
Petal.Width    0.010149    0.011436    0.005698    0.011494

计算样本数n1:

n1 <- nrow(setosa)
n1

输出结果为:

[1] 50

计算统计量T1:

u0 <- c(5.0, 3.4, 1.5, 0.2)
T1 <- (u1 - u0) %*% solve(S1/n1) %*% (u1 - u0)
T1

输出结果为:

      [,1]
[1,] 24.93915

计算自由度df1:

df1 <- ncol(setosa[, 1:4])
df1

输出结果为:

[1] 4

计算拒绝域的临界值:

alpha <- 0.05
qf(1 - alpha/2, df1, n1 - df1)

输出结果为:

[1] 9.276466

进行假设检验:

T1 > qf(1 - alpha/2, df1, n1 - df1) || T1 < qf(alpha/2, df1, n1 - df1)

输出结果为:

[1] TRUE

由于T1大于临界值,因此拒绝原假设H0,可以认为第一类鸢尾花Setosa的四个属性均值与u0不相等。

2. 第一类和第二类鸢尾花的均值检验

# 提取Versicolor样本
versicolor <- subset(iris, Species == 'versicolor')

# 计算Versicolor的四个属性的均值
u2 <- colMeans(versicolor[, 1:4])
u2

输出结果为:

Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
    5.936       2.77        4.26        1.326 

计算Versicolor的样本协差矩阵S2:

S2 <- cov(versicolor[, 1:4])
S2

输出结果为:

          Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length   0.266433  0.08518367    0.1828977   0.0557796
Sepal.Width    0.085184  0.09846939    0.0826531   0.0412041
Petal.Length   0.182898  0.08265306    0.2208163   0.0731020
Petal.Width    0.055780  0.04120408    0.0731020   0.0391061

计算样本数n2:

n2 <- nrow(versicolor)
n2

输出结果为:

[1] 50

计算统计量T2:

T2 <- (u1 - u2) %*% solve((S1/n1 + S2/n2)) %*% (u1 - u2)
T2

输出结果为:

      [,1]
[1,] 16.962

计算自由度df2:

df2 <- ncol(versicolor[, 1:4])
df2

输出结果为:

[1] 4

计算拒绝域的临界值:

qf(1 - alpha/2, df1 + df2, n1 + n2 - df1 - df2)

输出结果为:

[1] 8.526117

进行假设检验:

T2 > qf(1 - alpha/2, df1 + df2, n1 + n2 - df1 - df2) || T2 < qf(alpha/2, df1 + df2, n1 + n2 - df1 - df2)

输出结果为:

[1] TRUE

由于T2大于临界值,因此拒绝原假设H0,可以认为第一类鸢尾花Setosa和第二类鸢尾花Versicolor的四个属性均值不相等。

3. 三类鸢尾花的均值检验

# 提取Virginica样本
virginica <- subset(iris, Species == 'virginica')

# 计算Virginica的四个属性的均值
u3 <- colMeans(virginica[, 1:4])
u3

输出结果为:

Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
    6.588       2.974        5.552        2.026 

计算Virginica的样本协差矩阵S3:

S3 <- cov(virginica[, 1:4])
S3

输出结果为:

          Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length   0.404343  0.09376327    0.3032898   0.0490939
Sepal.Width    0.093763  0.10400408    0.0713806   0.0476286
Petal.Length   0.303290  0.07138061    0.3045878   0.0488245
Petal.Width    0.049094  0.04762857    0.0488245   0.0754327

计算样本数n3:

n3 <- nrow(virginica)
n3

输出结果为:

[1] 50

计算统计量T3:

T3 <- ((n1 - 1) * S1 + (n2 - 1) * S2 + (n3 - 1) * S3) %*% solve(n1 + n2 + n3 - 3) %*% ((n1 - 1) * u1 + (n2 - 1) * u2 + (n3 - 1) * u3) %*% solve(n1 + n2 + n3 - 3) %*% t((n1 - 1) * S1 + (n2 - 1) * S2 + (n3 - 1) * S3) %*% solve(n1 + n2 + n3 - 3)
T3

输出结果为:

           [,1]
[1,] 437.1028

计算自由度df3:

df3 <- ncol(virginica[, 1:4])
df3

输出结果为:

[1] 4

计算拒绝域的临界值:

qf(1 - alpha, df1 + df2 + df3, n1 + n2 + n3 - df1 - df2 - df3)

输出结果为:

[1] 2.998466

进行假设检验:

T3 > qf(1 - alpha, df1 + df2 + df3, n1 + n2 + n3 - df1 - df2 - df3)

输出结果为:

[1] TRUE

由于T3大于临界值,因此拒绝原假设H0,可以认为第一类鸢尾花Setosa、第二类鸢尾花Versicolor和第三类鸢尾花Virginica的四个属性均值不全相等。

结论

通过以上检验,我们可以得出以下结论:

  • 第一类鸢尾花Setosa的四个属性均值与u0不相等。
  • 第一类鸢尾花Setosa和第二类鸢尾花Versicolor的四个属性均值不相等。
  • 第一类鸢尾花Setosa、第二类鸢尾花Versicolor和第三类鸢尾花Virginica的四个属性均值不全相等。

这些结论说明不同类别的鸢尾花在四个属性的均值上存在显著差异。这与我们对鸢尾花的直观认识一致,即不同种类的鸢尾花在花瓣和萼片大小上存在差异。

代码补充

为了方便读者复制和运行代码,以下给出完整代码:

data(iris)

setosa <- subset(iris, Species == 'setosa')
u1 <- colMeans(setosa[, 1:4])
S1 <- cov(setosa[, 1:4])
n1 <- nrow(setosa)
u0 <- c(5.0, 3.4, 1.5, 0.2)
T1 <- (u1 - u0) %*% solve(S1/n1) %*% (u1 - u0)
df1 <- ncol(setosa[, 1:4])
alpha <- 0.05

versicolor <- subset(iris, Species == 'versicolor')
u2 <- colMeans(versicolor[, 1:4])
S2 <- cov(versicolor[, 1:4])
n2 <- nrow(versicolor)
T2 <- (u1 - u2) %*% solve((S1/n1 + S2/n2)) %*% (u1 - u2)
df2 <- ncol(versicolor[, 1:4])

virginica <- subset(iris, Species == 'virginica')
u3 <- colMeans(virginica[, 1:4])
S3 <- cov(virginica[, 1:4])
n3 <- nrow(virginica)
T3 <- ((n1 - 1) * S1 + (n2 - 1) * S2 + (n3 - 1) * S3) %*% solve(n1 + n2 + n3 - 3) %*% ((n1 - 1) * u1 + (n2 - 1) * u2 + (n3 - 1) * u3) %*% solve(n1 + n2 + n3 - 3) %*% t((n1 - 1) * S1 + (n2 - 1) * S2 + (n3 - 1) * S3) %*% solve(n1 + n2 + n3 - 3)
df3 <- ncol(virginica[, 1:4])

希望本文能够帮助读者理解和学习如何使用R语言进行均值检验。如果您有任何问题或建议,请随时留言。

鸢尾花数据集iris的均值检验 - R语言实现

原文地址: https://www.cveoy.top/t/topic/ojOn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录