最近,看到了一个关于jamovi的统计学软件的介绍,界面类似于SPSS,然后后台却是基于R语言制作。除了熟悉的SPSS操作界面外,还可以加载R包模块,甚至还可以自己开发一些模块来使用。在B站上大致看了下教程,可以说常见的统计功能比较齐全,非常适合医学生的研究统计工作。

然而,我花了一上午时间也没把安装包给下载下来,直接卡在第一步。

花了几分钟浏览了网页介绍,其实jamovi的核心就是使用JMV]这个R包,然后进行各种可视化操作。官网很贴心,有许多教程,就在resource的JMV R PACKAGE页面下.我看了以后,觉得可以按着教程跑一下学习学习,顺便写个中文版的,再加些个人的理解。

目前官网主要有5⃣️章的介绍:

  • 第 1 章– 统计学探索

  • 第 2 章– T检验

  • 第 3 章– 方差分析

  • 第 4 章– 回归

  • 第 5 章– 频数

  • 第 6 章– 因子

由于我的统计学并不专业,只能算是照猫画虎的copy一下,希望大家指出意见。


T检验

独立样本t检验

Student’s独立样本t检验(有时称为两样本t检验)用于检验两组均值相同的无效假设。低的p值表明无效假设不成立,也就是说各组的平均值有差异。

  • Student’s独立样本t检验用于假设每组的数据来自正态分布,并且这些组的方差相等(方差具有齐性)。

  • 如果假设各组的方差不能满足相等(方差不具有齐性),则可以使用Welch’s t检验(近似t检验)。

  • 如果假设每组数据不满足均呈正态分布,则可以使用非参数Mann-Whitney U检验(但是,请注意,Mann-Whitney U检验的零假设略有不同,即每组的分布是相等的)。

示例演示

比如我们调用自带的牙齿生长数据,部分显示见表1,supp包含VC和OJ两组,dose包含0.5、1.0和2.0三种剂量

data('ToothGrowth') #调用牙齿生长数据
Table 1: ToothGrowth数据的部分显示
len supp dose
4.2 VC 0.5
11.5 VC 0.5
7.3 VC 0.5
5.8 VC 0.5
6.4 VC 0.5
10.0 VC 0.5

t检验

比如,我们想做len在supp两组的t检验,代码如下:

library(jmv)
ttestIS(formula = len ~ supp, data = ToothGrowth)
## 
##  INDEPENDENT SAMPLES T-TEST
## 
##  Independent Samples T-Test                                   
##  ──────────────────────────────────────────────────────────── 
##                          Statistic    df          p           
##  ──────────────────────────────────────────────────────────── 
##    len    Student's t     1.915268    58.00000    0.0603934   
##  ────────────────────────────────────────────────────────────

但是实际上,我们不能如此简单粗暴的使用t检验,我们必须要先做正态性检验和方差齐性检验,这个函数也可以全部满足,具体的参数隐藏在help文档里。


我们可以从ttestIS()函数的帮助文件里面看看独立样本t检验的所有参数。

用法

从示例代码可知,默认显为students法,但是真正的t检验开始时还要做正态检验和方差齐性检验,可以先设置norm=T,eqv=T预先检验一下。如果想知道更多的参数,可以进行相应的设置,如95%CI和effectSize等,这个可以按需使用。

ttestIS(data, vars, group, students = TRUE, bf = FALSE,
  bfPrior = 0.707, welchs = FALSE, mann = FALSE,
  hypothesis = "different", norm = FALSE, qq = FALSE, eqv = FALSE,
  meanDiff = FALSE, ci = FALSE, ciWidth = 95, effectSize = FALSE,
  ciES = FALSE, ciWidthES = 95, desc = FALSE, plots = FALSE,
  miss = "perAnalysis", formula)

命令行参数

参数 解释
data 指定一个为数据结构的数据
vars 因变量 (使用公式时不需要,请参见示例)
group 具有两个级别的分组变量 (使用公式时不需要,请参见示例)
students

是否执行Student’s t检验

  • TRUE(默认)或者FALSE
bf

是否提供提供贝叶斯因子

  • 填TRUE或者FALSE(默认)
bfPrior 输入一个介于 0.5 和 2(默认为 0.707)之间的数 字,用于计算贝叶斯因子的先验宽度
welchs

是否执行Welch’s t检验

  • 填TRUE或者FALSE(默认)
mann

是否执行Mann-Whitney U检验

  • 填TRUE或者FALSE(默认)
hypothesis

替代假设

‘different’(默认)、‘oneGreater’ 或者 ‘twoGreater’ - 分别代表 组1

与组2不同、组1大于组2或组2大于组1

norm

是否执行Shapiro-Wilk正态性检验

  • 填TRUE或者FALSE(默认)
qq

是否提供残差Q-Q图

  • 填TRUE或者FALSE(默认)
eqv

是否执行Levene’s方差齐性检验

  • 填TRUE或者FALSE(默认)
meanDiff

是否提供均数和标准误

  • 填TRUE或者FALSE(默认)
ci

是否提供置信区间

  • 填TRUE或者FALSE(默认)
ciWidth

置信区间的宽度

  • 输入一个介于50和99.9之间的数字 (默认为95)
effectSize

是否提供效应大小

  • 填TRUE或者FALSE(默认)
ciES

是否提供效应大小的置信区间

  • 填TRUE或者FALSE(默认)
ciWidthES

效应大小的置信区间的宽度

  • 输入一个介于50和99.9之间的数字 (默认为95)
desc

是否提供描述性统计

  • 填TRUE或者FALSE(默认)
plots

是否提供描述性图片

  • 填TRUE或者FALSE(默认)
miss

如何处理缺失值

  • 填’perAnalysis’ 或者 ‘listwise’

  • 分别代表

“排除个别因变量的缺失值”或者"如果

某行缺失,则从所有分析中排除该行"

formula (可选)要使用的公式,请参见示例

返回结果

如果定义一个结果对象(如results<-...),可以返回以下结果:

代码 返回结果
results$ttest 一个包含t检验结果的表格
results$assum$norm 一个包括正态性检验的表格
results$assum$eqv 一个包括方差齐性检验的表格
results$desc 一个包括各组统计性描述的表格
results$plots 一个组图

可以使用asDF或as.data.frame()将表格转换为数据框。例如:

results$ttest$asDF

as.data.frame(results$ttest)

可以使用[[n]]访问数组中的元素。例如:

results$frequencies[[1]]   #访问第一个元素

统计思路

两独立样本的t检验需要先做正态检验,如果是正态分布才能使用t检验,如果不是正态分布则要使用非参数检验。而对于正态分布的数据,还要看方差齐性,如果方差齐才有student的t检验,否则要使用welchs的t检验,而本函数可以全部计算好。

思路如下:

  • 正态检验:norm=T

    • 正态分布,继续做方差齐性检验:eqv=T

      • 方差齐性:student=T

      • 方差不齐:welchs=T

    • 非正态分布:mann=T

统计演示

我们还是以ToothGrowth为例

jmv::ttestIS(formula = len ~ supp, data = ToothGrowth,norm = T,eqv = T)
## 
##  INDEPENDENT SAMPLES T-TEST
## 
##  Independent Samples T-Test                                   
##  ──────────────────────────────────────────────────────────── 
##                          Statistic    df          p           
##  ──────────────────────────────────────────────────────────── 
##    len    Student's t     1.915268    58.00000    0.0603934   
##  ──────────────────────────────────────────────────────────── 
## 
## 
##  ASSUMPTIONS
## 
##  Normality Test (Shapiro-Wilk)     
##  ───────────────────────────────── 
##           W            p           
##  ───────────────────────────────── 
##    len    0.9694896    0.1377619   
##  ───────────────────────────────── 
##    Note. A low p-value
##    suggests a violation of the
##    assumption of normality
## 
## 
##  Homogeneity of Variances Test (Levene's)      
##  ───────────────────────────────────────────── 
##           F           df    df2    p           
##  ───────────────────────────────────────────── 
##    len    1.097334     1     58    0.2991977   
##  ───────────────────────────────────────────── 
##    Note. A low p-value suggests a
##    violation of the assumption of equal
##    variances

结果可以看到正态性检验和方差齐性检验的p值都是大于0.05,那就可以直接选择t检验

如果只想用Welch’s t检验,代码如下:

ttestIS(formula = len ~ supp, data = ToothGrowth,welchs = T, students = F)
## 
##  INDEPENDENT SAMPLES T-TEST
## 
##  Independent Samples T-Test                                 
##  ────────────────────────────────────────────────────────── 
##                        Statistic    df          p           
##  ────────────────────────────────────────────────────────── 
##    len    Welch's t     1.915268    55.30943    0.0606345   
##  ──────────────────────────────────────────────────────────

如果只想使用非参数检验,代码如下:

ttestIS(formula = len ~ supp, data = ToothGrowth,mann = T, students = F)
## 
##  INDEPENDENT SAMPLES T-TEST
## 
##  Independent Samples T-Test                          
##  ─────────────────────────────────────────────────── 
##                             Statistic    p           
##  ─────────────────────────────────────────────────── 
##    len    Mann-Whitney U     324.5000    0.0644907   
##  ───────────────────────────────────────────────────

当然你还可以简单粗暴的把所有计算全部都用上,代码如下:

ttestIS(formula = len ~ supp, data = ToothGrowth,
        mann = T, students = T,welchs = T,
        norm = T,eqv = T)
## 
##  INDEPENDENT SAMPLES T-TEST
## 
##  Independent Samples T-Test                                      
##  ─────────────────────────────────────────────────────────────── 
##                             Statistic    df          p           
##  ─────────────────────────────────────────────────────────────── 
##    len    Student's t        1.915268    58.00000    0.0603934   
##           Welch's t          1.915268    55.30943    0.0606345   
##           Mann-Whitney U     324.5000                0.0644907   
##  ─────────────────────────────────────────────────────────────── 
## 
## 
##  ASSUMPTIONS
## 
##  Normality Test (Shapiro-Wilk)     
##  ───────────────────────────────── 
##           W            p           
##  ───────────────────────────────── 
##    len    0.9694896    0.1377619   
##  ───────────────────────────────── 
##    Note. A low p-value
##    suggests a violation of the
##    assumption of normality
## 
## 
##  Homogeneity of Variances Test (Levene's)      
##  ───────────────────────────────────────────── 
##           F           df    df2    p           
##  ───────────────────────────────────────────── 
##    len    1.097334     1     58    0.2991977   
##  ───────────────────────────────────────────── 
##    Note. A low p-value suggests a
##    violation of the assumption of equal
##    variances

这里还有一个简单的统计图,见图 1

ttestIS(formula = len ~ supp, data = ToothGrowth,plots = T)$plots
独立样本对照图

Figure 1: 独立样本对照图

如果想看Q-Q图,可以添加qq=T,plots = T,代码如下:


配对样本t检验

Student’s配对样本t检验(有时称为依赖样品t测检验)用于检验测量对之间的差异等于零的无效假设。低p值表明零假设不成立,测量对之间的差异不为零。

  • Student’s配对样本t检验假设配对差异遵循正态分布

  • 如果不符合这种假设,则可以使用非参数Wilcoxon符号秩来代替(但是,请注意Wilcoxon符号秩具有稍微不同的零假设,即两组测量值遵循相同的分布)。

示例演示

比如我们调用jmv包中的bugs数据,部分显示见表2,我们比较LDLF和LDHF有没有差异

data('bugs', package = 'jmv')
Table 2: bugs数据的部分显示
Subject Gender Region Education LDLF LDHF HDLF HDHF
1 Female North America some 6 6.0 9.0 10.0
2 Female North America advance 10 NA 10.0 10.0
3 Female Europe college 5 10.0 10.0 10.0
4 Female North America college 6 9.0 6.0 9.0
5 Female North America some 3 6.5 5.5 8.5
6 Female Europe some 2 0.5 7.5 3.0

配对t检验

ttestPS(bugs, pairs = list(
        list(i1 = 'LDLF', i2 = 'LDHF')))
## 
##  PAIRED SAMPLES T-TEST
## 
##  Paired Samples T-Test                                                  
##  ────────────────────────────────────────────────────────────────────── 
##                                   statistic    df          p            
##  ────────────────────────────────────────────────────────────────────── 
##    LDLF    LDHF    Student's t    -6.648618    90.00000    < .0000001   
##  ──────────────────────────────────────────────────────────────────────

注意,仅当差值呈正态分布时,才可以使用配对样本t检验,如果数据不是正态分布的,建议使用非参数配对样本Wilcoxon检验。这里要明确一个概念,配对资料不需要进行方差齐性检验。同样的,我们先看ttestPS()的help文档

用法

ttestPS(data, pairs, students = TRUE, bf = FALSE, bfPrior = 0.707,
  wilcoxon = FALSE, hypothesis = "different", norm = FALSE,
  qq = FALSE, meanDiff = FALSE, ci = FALSE, ciWidth = 95,
  effectSize = FALSE, ciES = FALSE, ciWidthES = 95, desc = FALSE,
  plots = FALSE, miss = "perAnalysis")

命令行参数

基本与独立样本的t检验一致。只有两处不同,一个是把group换成了一个pair,另外是配对资料没有方差齐性检验,所以也没有Welch检验,其他的都是一样的。

参数 解释
data 指定一个为数据结构的数据
pairs 指定数据中配对参数列表的列表
students

是否执行Student’s t检验

  • TRUE(默认)或者FALSE
bf

是否提供提供贝叶斯因子

  • 填TRUE或者FALSE(默认)
bfPrior 输入一个介于 0.5 和 2(默认为 0.707)之间的数 字,用于计算贝叶斯因子的先验宽度
wilconxon

是否执行Wilcoxon signed rank检验

  • 填TRUE或者FALSE(默认)
hypothesis

替代假设

‘different’(默认)、‘oneGreater’ 或者 ‘twoGreater’ - 分别代表 组1

与组2不同、组1大于组2或组2大于组1

norm

是否执行Shapiro-Wilk正态性检验

  • 填TRUE或者FALSE(默认)
qq

是否提供残差Q-Q图

  • 填TRUE或者FALSE(默认)
meanDiff

是否提供均数和标准误

  • 填TRUE或者FALSE(默认)
ci

是否提供置信区间

  • 填TRUE或者FALSE(默认)
ciWidth

置信区间的宽度

  • 输入一个介于50和99.9之间的数字 (默认为95)
effectSize

是否提供效应大小

  • 填TRUE或者FALSE(默认)
ciES

是否提供效应大小的置信区间

  • 填TRUE或者FALSE(默认)
ciWidthES

效应大小的置信区间的宽度

  • 输入一个介于50和99.9之间的数字 (默认为95)
desc

是否提供描述性统计

  • 填TRUE或者FALSE(默认)
plots

是否提供描述性图片

  • 填TRUE或者FALSE(默认)
miss

如何处理缺失值

  • 填’perAnalysis’ 或者 ‘listwise’

  • 分别代表

“排除个别因变量的缺失值”或者"如果

某行缺失,则从所有分析中排除该行"

返回结果

如果定义一个结果对象(如results<-...),可以返回以下结果:

代码 返回结果
results$ttest 一个包含t检验结果的表格
results$assum$norm 一个包括正态性检验的表格
results$assum$eqv 一个包括方差齐性检验的表格
results$desc 一个包括各组统计性描述的表格
results$plots 一个组图

可以使用asDF或as.data.frame()将表格转换为数据框。例如:

results$ttest$asDF

as.data.frame(results$ttest)

可以使用[[n]]访问数组中的元素。例如:

results$frequencies[[1]]   #访问第一个元素

统计演示

配对样本的t检验由于不用方差齐性检验,所以只需先做正态检验(norm = T)即可,如果是是正态分布就选择t检验,如果不是正态分布,就选择非参数检验。

为了节约时间,我们可以把需要的计算全部算上,然后选择哪种检验方法

结果可以发现这个数据是不符合正态分布的(正态检验的p值为0.0028489 ),所以官网给的示例演示不对,我们应该选择wilcoxon = T

pairresult<-ttestPS(bugs, pairs = list(
        list(i1 = 'LDLF', i2 = 'LDHF')),
        students = TRUE,wilcoxon = T,norm = T,qq=T,
        plots = T,
        desc = T,
        miss = "perAnalysis" # 可以看到本数据有缺失值,我们需要设置缺失值
        )
pairresult
## 
##  PAIRED SAMPLES T-TEST
## 
##  Paired Samples T-Test                                                  
##  ────────────────────────────────────────────────────────────────────── 
##                                   statistic    df          p            
##  ────────────────────────────────────────────────────────────────────── 
##    LDLF    LDHF    Student's t    -6.648618    90.00000    < .0000001   
##                    Wilcoxon W      305.5000                < .0000001   
##  ────────────────────────────────────────────────────────────────────── 
## 
## 
##  Normality Test (Shapiro-Wilk)                   
##  ─────────────────────────────────────────────── 
##                         W            p           
##  ─────────────────────────────────────────────── 
##    LDLF    -    LDHF    0.9541499    0.0028489   
##  ─────────────────────────────────────────────── 
##    Note. A low p-value suggests a violation
##    of the assumption of normality
## 
## 
##  Descriptives                                                    
##  ─────────────────────────────────────────────────────────────── 
##            N     Mean        Median      SD          SE          
##  ─────────────────────────────────────────────────────────────── 
##    LDLF    91    5.714286    6.000000    2.665774    0.2794490   
##    LDHF    91    7.379121    8.000000    2.519194    0.2640833   
##  ───────────────────────────────────────────────────────────────
配对资料T检验

Figure 2: 配对资料T检验

配对资料T检验

Figure 3: 配对资料T检验

单样本t检验

Student’s 的单样本t检验用于检验真实平均值等于特定值(通常为零)的零假设。低p值表明无效假设不成立,因此真实平均值必须与测试值不同。

  • Student’s 的单样本t检验假设数据必要来自正态分布

  • 如果不愿意这样假设,则可以使用非参数Wilcoxon符号秩代替(但是,请注意,Wilcoxon符号秩具有稍微不同的零假设,即中位数等于测试值)。

示例演示

我们依然调用自带的牙齿生长数据,部分显示见表1,supp包含VC和OJ两组,dose包含0.5、1.0和2.0三种剂量

data('ToothGrowth')

单样本t检验

ttestOneS(ToothGrowth, vars = vars(len, dose))
## 
##  ONE SAMPLE T-TEST
## 
##  One Sample T-Test                                              
##  ────────────────────────────────────────────────────────────── 
##                           Statistic    df          p            
##  ────────────────────────────────────────────────────────────── 
##    len     Student's t     19.05105    59.00000    < .0000001   
##    dose    Student's t     14.37011    59.00000    < .0000001   
##  ──────────────────────────────────────────────────────────────

注意,仅当差值呈正态分布时,才可以使用单样本t检验,如果数据不是正态分布的,建议使用非参数单样本Wilcoxon检验。这里跟配对资料一样不需要进行方差齐性检验。同样的,我们先看ttestOneS()的help文档

用法

ttestOneS(data, vars, students = TRUE, bf = FALSE, bfPrior = 0.707,
  wilcoxon = FALSE, testValue = 0, hypothesis = "dt", norm = FALSE,
  qq = FALSE, meanDiff = FALSE, ci = FALSE, ciWidth = 95,
  effectSize = FALSE, ciES = FALSE, ciWidthES = 95, desc = FALSE,
  plots = FALSE, miss = "perAnalysis", mann = FALSE)

命令行参数

基本与独立样本的t检验一致。唯一两处不同,一个不同是没有group,另外一个不同就是就是没有方差齐性检验,所以也没有Welch检验,另外虽然有mann,但其实是换成了wilcoxon,其他的都是一样的。

参数 解释
data 指定一个为数据结构的数据
vars 因变量 (使用公式时不需要,请参见示例)
students

是否执行Student’s t检验

  • TRUE(默认)或者FALSE
bf

是否提供提供贝叶斯因子

  • 填TRUE或者FALSE(默认)
bfPrior 输入一个介于 0.5 和 2(默认为 0.707)之间的数 字,用于计算贝叶斯因子的先验宽度
wilcoxon

是否执行Wilcoxon signed rank检验

  • 填TRUE或者FALSE(默认)
testValue 指定零假设值的数字,一般为0
hypothesis

替代假设

‘different’(默认)、‘oneGreater’ 或者 ‘twoGreater’ - 分别代表 组1

与组2不同、组1大于组2或组2大于组1

norm

是否执行Shapiro-Wilk正态性检验

  • 填TRUE或者FALSE(默认)
qq

是否提供残差Q-Q图

  • 填TRUE或者FALSE(默认)
eqv

是否执行Levene’s方差齐性检验

  • 填TRUE或者FALSE(默认)
meanDiff

是否提供均数和标准误

  • 填TRUE或者FALSE(默认)
ci

是否提供置信区间

  • 填TRUE或者FALSE(默认)
ciWidth

置信区间的宽度

  • 输入一个介于50和99.9之间的数字 (默认为95)
effectSize

是否提供效应大小

  • 填TRUE或者FALSE(默认)
ciES

是否提供效应大小的置信区间

  • 填TRUE或者FALSE(默认)
ciWidthES

效应大小的置信区间的宽度

  • 输入一个介于50和99.9之间的数字 (默认为95)
desc

是否提供描述性统计

  • 填TRUE或者FALSE(默认)
plots

是否提供描述性图片

  • 填TRUE或者FALSE(默认)
miss

如何处理缺失值

  • 填’perAnalysis’ 或者 ‘listwise’

  • 分别代表

“排除个别因变量的缺失值”或者"如果

某行缺失,则从所有分析中排除该行"

formula (可选)要使用的公式,请参见示例

返回结果

如果定义一个结果对象(如results<-...),可以返回以下结果:

代码 返回结果
results$ttest 一个包含t检验结果的表格
results$normality 一个包括正态性检验结果的表格
results$descriptives 一个包括统计学描述的表格
results$plots 一个统计性描述的图片
results$qq Q-Q图图

可以使用asDF或as.data.frame()将表格转换为数据框。例如:

results$ttest$asDF

as.data.frame(results$ttest)

可以使用[[n]]访问数组中的元素。例如:

results$frequencies[[1]]   #访问第一个元素

统计思路

单样本的t检验需要先做正态检验,如果是正态分布才能使用t检验,如果不是正态分布则要使用非参数检验。

统计演示

为了节约时间,我们可以把需要的计算全部算上,然后选择哪种检验方法

结果可以发现这个数据中dose是不符合正态分布的(正态检验的p值为0.0028489 ),所以要选择wilcoxon = T,也就是len可以用t检验,但是dose要用非参数检验。

oneS<- ttestOneS(ToothGrowth, vars = vars(len, dose),
                 students = T,wilcoxon = T,
                 norm=T,qq=T,plots=T)
oneS
## 
##  ONE SAMPLE T-TEST
## 
##  One Sample T-Test                                              
##  ────────────────────────────────────────────────────────────── 
##                           Statistic    df          p            
##  ────────────────────────────────────────────────────────────── 
##    len     Student's t     19.05105    59.00000    < .0000001   
##            Wilcoxon W      1830.000                < .0000001   
##                                                                 
##    dose    Student's t     14.37011    59.00000    < .0000001   
##            Wilcoxon W      1830.000                < .0000001   
##  ────────────────────────────────────────────────────────────── 
## 
## 
##  Normality Test (Shapiro-Wilk)       
##  ─────────────────────────────────── 
##            W            p            
##  ─────────────────────────────────── 
##    len     0.9674286     0.1091005   
##    dose    0.7649050    < .0000001   
##  ─────────────────────────────────── 
##    Note. A low p-value suggests
##    a violation of the assumption
##    of normality
单样本的T检验

Figure 4: 单样本的T检验

单样本的T检验

Figure 5: 单样本的T检验

单样本的T检验

Figure 6: 单样本的T检验

作者简介

欧阳松石河子大学医学院第一附属医院泌尿外科主治医师、讲师、医学博士。 擅长泌尿及男性生殖系统常见疾病的诊疗,对男性生殖医学疾病具有较深研究熟悉各种泌尿男科手术及腔镜微创诊疗技术, 同时擅长R语言在生物信息方面的研究。

欧阳松 (2021). 使用jmv包进行T检验. 欧阳松的博客. https://swcyo.rbind.io/course/jmvttest/

BibTeX citation

@misc{
  title = "使用jmv包进行T检验",
  author = "欧阳松",
  year = "2021",
  journal = "欧阳松的博客",
  note = "https://swcyo.rbind.io/course/jmvttest/"
}
.. ... ...
本站总访问量次; 本站访客数人次; 本文总阅读量次;