📜  R 编程中的比较方法

📅  最后修改于: 2022-05-13 01:54:35.782000             🧑  作者: Mango

R 编程中的比较方法

在数据分析中有很多情况,您需要比较两个总体或样本的均值,您应该使用哪种技术取决于您拥有的数据类型以及这些数据如何组合在一起。均值检验的比较有助于确定您的组是否具有相似的均值。因此,本文包含用于比较R 编程中的平均值的统计测试这些测试包括:

  • T检验
  • 威尔科克森试验
  • 方差分析测试
  • Kruskal-Wallis 检验

R 编程中的比较方法

因此,正如我们在使用各种技术之前所讨论的,这取决于我们拥有的数据类型以及数据如何组合在一起。因此,让我们根据不同类型的数据来一一讨论技术。

比较单样本数据的均值

主要有两种技术用于将单样本均值与标准已知均值进行比较。这两种技术是:

  • 一个样本 T 检验
  • 单样本 Wilcoxon 检验

一个样本 T 检验

单样本 T 检验用于检验样本均值与总体中均值的已知或假设/假设值之间的统计差异。

R中的实现:

要在 R 中执行单样本 t 检验,请使用函数t.test()。该函数的语法如下所示:

例子:

R
# R program to illustrate
# One sample t-test
 
set.seed(0)
sweetSold <- c(rnorm(50, mean = 140, sd = 5))
 
# Ho: mu = 150
# Using the t.test()
result = t.test(sweetSold, mu = 150)
 
# Print the result
print(result)


R
# R program to illustrate
# one-sample Wilcoxon signed-rank test
 
# The data set
set.seed(1234)
myData = data.frame(
name = paste0(rep("R_", 10), 1:10),
weight = round(rnorm(10, 30, 2), 1)
)
 
# Print the data
print(myData)
 
# One-sample wilcoxon test
result = wilcox.test(myData$weight, mu = 25)
 
# Printing the results
print(result)


R
# R program to illustrate
# Paired sample t-test
 
set.seed(0)
 
# Taking two numeric vectors
shopOne <- rnorm(50, mean = 140, sd = 4.5)
shopTwo <- rnorm(50, mean = 150, sd = 4)
 
# Using t.tset()
result = t.test(shopOne, shopTwo,
                var.equal = TRUE)
 
# Print the result
print(result)


R
# R program to illustrate
# Paired Samples Wilcoxon Test
 
# The data set
# Weight of the rabbit before treatment
before <-c(190.1, 190.9, 172.7, 213, 231.4,
        196.9, 172.2, 285.5, 225.2, 113.7)
 
# Weight of the rabbit after treatment
after <-c(392.9, 313.2, 345.1, 393, 434,
        227.9, 422, 383.9, 392.3, 352.2)
 
# Create a data frame
myData <- data.frame(
group = rep(c("before", "after"), each = 10),
weight = c(before, after)
)
 
# Print all data
print(myData)
 
# Paired Samples Wilcoxon Test
result = wilcox.test(before, after, paired = TRUE)
 
# Printing the results
print(result)


R
# R program to illustrate
# one way ANOVA test
 
# Loading the package
library(dplyr)
 
# Calculate test statistics using aov function
mtcars_aov <- aov(mtcars $ disp ~ factor(mtcars $ gear))
print(summary(mtcars_aov))


R
# R program to illustrate
# two way ANOVA test
 
# Loading the package
library(dplyr)
 
# Calculate test statistics using aov function
mtcars_aov2 = aov(mtcars $ disp ~ factor(mtcars $ gear) *
                  factor(mtcars $ am))
print(summary(mtcars_aov2))


R
# R program to illustrate
# MANOVA test
 
# Import required library
library(dplyr)
 
# Taking iris data set
myData = iris
 
# Show a random sample
set.seed(1234)
dplyr::sample_n(myData, 10)


R
# Taking two dependent variable
sepal = iris$Sepal.Length
petal = iris$Petal.Length
 
# MANOVA test
result = manova(cbind(Sepal.Length, Petal.Length) ~ Species,
                      data = iris)
summary(result)


R
# Preparing the data set
# to perform Kruskal-Wallis Test
 
# Taking the PlantGrowth data set
myData = PlantGrowth
print(myData)
 
# Show the group levels
print(levels(myData$group))


R
# R program to illustrate
# Kruskal-Wallis Test
 
# Taking the PlantGrowth data set
myData = PlantGrowth
 
# Performing Kruskal-Wallis test
result = kruskal.test(weight ~ group,
                      data = myData)
print(result)


输出:

One Sample t-test

data:  sweetSold
t = -15.249, df = 49, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 150
95 percent confidence interval:
 138.8176 141.4217
sample estimates:
mean of x 
 140.1197 

单样本 Wilcoxon 检验

当数据不能被假定为正态分布时,单样本 Wilcoxon 符号秩检验是单样本 t 检验的非参数替代方案。它用于确定样本的中位数是否等于已知的标准值,即理论值。

R中的实现:

为了执行单样本 Wilcoxon 检验,R 提供了一个函数wilcox.test() ,可以按如下方式使用:

示例:在这里,让我们使用一个包含 10 只兔子体重的示例数据集。让我们知道兔子的体重中位数是否不同于25g?

R

# R program to illustrate
# one-sample Wilcoxon signed-rank test
 
# The data set
set.seed(1234)
myData = data.frame(
name = paste0(rep("R_", 10), 1:10),
weight = round(rnorm(10, 30, 2), 1)
)
 
# Print the data
print(myData)
 
# One-sample wilcoxon test
result = wilcox.test(myData$weight, mu = 25)
 
# Printing the results
print(result)

输出:

name weight
1   R_1   27.6
2   R_2   30.6
3   R_3   32.2
4   R_4   25.3
5   R_5   30.9
6   R_6   31.0
7   R_7   28.9
8   R_8   28.9
9   R_9   28.9
10 R_10   28.2

    Wilcoxon signed rank test with continuity correction

data:  myData$weight
V = 55, p-value = 0.005793
alternative hypothesis: true location is not equal to 25

在上述输出中,检验的 p 值为 0.005793,小于显着性水平 alpha = 0.05。因此我们可以拒绝原假设并得出结论,兔子的平均体重与 25g 显着不同,p 值 = 0.005793。

比较配对样本的均值

主要有两种技术用于比较配对样本的均值。这两种技术是:

  • 配对样本 T 检验
  • 配对样本 Wilcoxon 检验

配对样本 T 检验

这是一个统计程序,用于确定两组观测值之间的平均差是否为零。在配对样本 t 检验中,每个受试者被测量两次,从而产生成对的观察结果。

R中的实现:

要在 R 中执行单样本 t 检验,请使用函数t.test()。该函数的语法如下所示。

例子:

R

# R program to illustrate
# Paired sample t-test
 
set.seed(0)
 
# Taking two numeric vectors
shopOne <- rnorm(50, mean = 140, sd = 4.5)
shopTwo <- rnorm(50, mean = 150, sd = 4)
 
# Using t.tset()
result = t.test(shopOne, shopTwo,
                var.equal = TRUE)
 
# Print the result
print(result)

输出:

配对样本 Wilcoxon 检验

配对样本 Wilcoxon 检验是配对 t 检验的非参数替代方法,用于比较配对数据。当数据不是正态分布时使用它。

R中的实现:

为了执行配对样本 Wilcoxon 检验,R 提供了一个函数wilcox.test() ,可以按如下方式使用:

示例:在这里,我们使用一个示例数据集,其中包含 10 只兔子在治疗前后的体重。我们想知道,治疗前后体重中位数是否有显着差异?

R

# R program to illustrate
# Paired Samples Wilcoxon Test
 
# The data set
# Weight of the rabbit before treatment
before <-c(190.1, 190.9, 172.7, 213, 231.4,
        196.9, 172.2, 285.5, 225.2, 113.7)
 
# Weight of the rabbit after treatment
after <-c(392.9, 313.2, 345.1, 393, 434,
        227.9, 422, 383.9, 392.3, 352.2)
 
# Create a data frame
myData <- data.frame(
group = rep(c("before", "after"), each = 10),
weight = c(before, after)
)
 
# Print all data
print(myData)
 
# Paired Samples Wilcoxon Test
result = wilcox.test(before, after, paired = TRUE)
 
# Printing the results
print(result)

输出:

group weight
1  before  190.1
2  before  190.9
3  before  172.7
4  before  213.0
5  before  231.4
6  before  196.9
7  before  172.2
8  before  285.5
9  before  225.2
10 before  113.7
11  after  392.9
12  after  313.2
13  after  345.1
14  after  393.0
15  after  434.0
16  after  227.9
17  after  422.0
18  after  383.9
19  after  392.3
20  after  352.2

    Wilcoxon signed rank test

data:  before and after
V = 0, p-value = 0.001953
alternative hypothesis: true location shift is not equal to 0

在上述输出中,检验的 p 值为 0.001953,小于显着性水平 alpha = 0.05。我们可以得出结论,治疗前小鼠的中位体重与治疗后的中位体重显着不同,p 值 = 0.001953。

比较两个以上组的平均值

主要有两种技术用于将单样本均值与标准已知均值进行比较。这两种技术是:

  • 方差分析 (ANOVA)
    • 单向方差分析
    • 双向方差分析
    • MANOVA 测试
  • 克鲁斯卡尔-沃利斯检验

单向方差分析

单因素方差分析 (ANOVA),也称为单因素 ANOVA,是独立双样本 t 检验的扩展,用于在多于两组的情况下比较均值。在单向方差分析中,数据基于一个分组变量被组织成几组。

R中的实现:

要在 R 中执行单向方差分析 (ANOVA),请使用函数aov()。函数summary.aov()用于总结方差模型的分析。该函数的语法如下所示。

例子:

一种方法是使用 mtcars 数据集执行 ANOVA 测试,该数据集在 disp 属性(连续属性)和 gear 属性(分类属性)之间预装了 dplyr 包。

R

# R program to illustrate
# one way ANOVA test
 
# Loading the package
library(dplyr)
 
# Calculate test statistics using aov function
mtcars_aov <- aov(mtcars $ disp ~ factor(mtcars $ gear))
print(summary(mtcars_aov))

输出:

总结表明齿轮属性对位移非常重要(三颗星表示)。另外,P值小于0.05,证明齿轮对位移有显着影响,即相互关联,我们拒绝零假设。

双向方差分析

双向 ANOVA 检验用于同时评估两个分组变量(A 和 B)对响应变量的影响。它考虑了两个类别组。

R中的实现:

要在 R 中执行双向方差分析 (ANOVA),还可以使用函数aov()。函数summary.aov() 用于总结方差分析模型。该函数的语法如下所示。

示例:使用 mtcars 数据集执行双向 ANOVA 测试,该数据集在 disp 属性、连续属性和齿轮属性、分类属性、am 属性、分类属性之间预装了 dplyr 包。

R

# R program to illustrate
# two way ANOVA test
 
# Loading the package
library(dplyr)
 
# Calculate test statistics using aov function
mtcars_aov2 = aov(mtcars $ disp ~ factor(mtcars $ gear) *
                  factor(mtcars $ am))
print(summary(mtcars_aov2))

输出:

总结表明,gear 属性对位移非常重要(三颗星表示),am 属性对位移没有太大意义。齿轮的P值小于0.05,证明齿轮对位移有显着影响,即相互关联。 am 的 P 值大于 0.05,am 对位移不显着,即互不相关。

MANOVA 测试

多元方差分析 (MANOVA)只是具有多个因变量的 ANOVA(方差分析)。它是 ANOVA 的延续。在 ANOVA 中,我们通过独立分组变量测试一个连续因变量的统计差异。 MANOVA 通过采用多个连续因变量并将它们共同捆绑成一个加权线性复合变量来继续此分析。 MANOVA 比较新创建的组合是否因自变量的不同水平或组而变化。

R中的实现:

R 提供了一种方法manova()来执行 MANOVA 测试。 “manova”类与“aov”类的不同之处在于选择不同的汇总方法。函数manova() 调用 aov,然后将类“manova”添加到每个层的结果对象中。

示例:要在 R 中执行 MANOVA 测试,让我们采用 iris 数据集。

R

# R program to illustrate
# MANOVA test
 
# Import required library
library(dplyr)
 
# Taking iris data set
myData = iris
 
# Show a random sample
set.seed(1234)
dplyr::sample_n(myData, 10)

输出:

Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
1           5.5         2.5          4.0         1.3 versicolor
2           5.6         2.5          3.9         1.1 versicolor
3           6.0         2.9          4.5         1.5 versicolor
4           6.4         3.2          5.3         2.3  virginica
5           4.3         3.0          1.1         0.1     setosa
6           7.2         3.2          6.0         1.8  virginica
7           5.9         3.0          4.2         1.5 versicolor
8           4.6         3.1          1.5         0.2     setosa
9           7.9         3.8          6.4         2.0  virginica
10          5.1         3.4          1.5         0.2     setosa

要知道不同物种之间的萼片和花瓣长度是否存在任何重要差异,请执行 MANOVA 测试。因此,函数manova()可以按如下方式使用。

R

# Taking two dependent variable
sepal = iris$Sepal.Length
petal = iris$Petal.Length
 
# MANOVA test
result = manova(cbind(Sepal.Length, Petal.Length) ~ Species,
                      data = iris)
summary(result)

输出:

从上面的输出可以看出,这两个变量在 Species 之间存在高度显着差异。

Kruskal-Wallis 检验

Kruskal-Wallis 检验是一种基于等级的检验,类似于 Mann-Whitney U 检验,但可以应用于具有两个以上组的单向数据。它是单向 ANOVA 检验的非参数替代方案,它扩展了双样本 Wilcoxon 检验。如果一组数据样本来自不相关的人群并且样本之间不相互影响,则它们是独立的。使用 Kruskal-Wallis 检验,可以确定总体分布是否相似,而不假设它们遵循正态分布。

R中的实现:

R 提供了一个方法kruskal.test()可以在 stats 包中执行 Kruskal-Wallis 秩和检验。

示例:让我们使用名为 PlantGrowth 的内置 R 数据集。它包含在对照和两种不同处理条件下获得的植物重量。

R

# Preparing the data set
# to perform Kruskal-Wallis Test
 
# Taking the PlantGrowth data set
myData = PlantGrowth
print(myData)
 
# Show the group levels
print(levels(myData$group))

输出:

weight group
1    4.17  ctrl
2    5.58  ctrl
3    5.18  ctrl
4    6.11  ctrl
5    4.50  ctrl
6    4.61  ctrl
7    5.17  ctrl
8    4.53  ctrl
9    5.33  ctrl
10   5.14  ctrl
11   4.81  trt1
12   4.17  trt1
13   4.41  trt1
14   3.59  trt1
15   5.87  trt1
16   3.83  trt1
17   6.03  trt1
18   4.89  trt1
19   4.32  trt1
20   4.69  trt1
21   6.31  trt2
22   5.12  trt2
23   5.54  trt2
24   5.50  trt2
25   5.37  trt2
26   5.29  trt2
27   4.92  trt2
28   6.15  trt2
29   5.80  trt2
30   5.26  trt2
[1] "ctrl" "trt1" "trt2"

这里“组”列称为因子,不同类别(“ctr”、“trt1”、“trt2”)称为因子级别。级别按字母顺序排列。问题陈述是我们想知道在 3 个实验条件下植物的平均重量之间是否存在显着差异。并且可以使用下面给出的函数kruskal.test() 来执行测试。

R

# R program to illustrate
# Kruskal-Wallis Test
 
# Taking the PlantGrowth data set
myData = PlantGrowth
 
# Performing Kruskal-Wallis test
result = kruskal.test(weight ~ group,
                      data = myData)
print(result)

输出:

由于 p 值小于显着性水平 0.05,因此可以得出结论,治疗组之间存在显着差异。