最近,看到了一个关于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') #调用牙齿生长数据
| 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检验
|
| bf | 是否提供提供贝叶斯因子
|
| bfPrior | 输入一个介于 0.5 和 2(默认为 0.707)之间的数 字,用于计算贝叶斯因子的先验宽度 |
| welchs | 是否执行Welch’s t检验
|
| mann | 是否执行Mann-Whitney U检验
|
| hypothesis | 替代假设
‘different’(默认)、‘oneGreater’ 或者 ‘twoGreater’ - 分别代表 组1 与组2不同、组1大于组2或组2大于组1 |
| norm | 是否执行Shapiro-Wilk正态性检验
|
是否提供残差Q-Q图
|
|
| eqv | 是否执行Levene’s方差齐性检验
|
| meanDiff | 是否提供均数和标准误
|
| ci | 是否提供置信区间
|
| ciWidth | 置信区间的宽度
|
| effectSize | 是否提供效应大小
|
| ciES | 是否提供效应大小的置信区间
|
| ciWidthES | 效应大小的置信区间的宽度
|
| desc | 是否提供描述性统计
|
| plots | 是否提供描述性图片
|
| miss | 如何处理缺失值
“排除个别因变量的缺失值”或者"如果 某行缺失,则从所有分析中排除该行" |
| 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')
| 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检验
|
| bf | 是否提供提供贝叶斯因子
|
| bfPrior | 输入一个介于 0.5 和 2(默认为 0.707)之间的数 字,用于计算贝叶斯因子的先验宽度 |
| wilconxon | 是否执行Wilcoxon signed rank检验
|
| hypothesis | 替代假设
‘different’(默认)、‘oneGreater’ 或者 ‘twoGreater’ - 分别代表 组1 与组2不同、组1大于组2或组2大于组1 |
| norm | 是否执行Shapiro-Wilk正态性检验
|
是否提供残差Q-Q图
|
|
| meanDiff | 是否提供均数和标准误
|
| ci | 是否提供置信区间
|
| ciWidth | 置信区间的宽度
|
| effectSize | 是否提供效应大小
|
| ciES | 是否提供效应大小的置信区间
|
| ciWidthES | 效应大小的置信区间的宽度
|
| desc | 是否提供描述性统计
|
| plots | 是否提供描述性图片
|
| miss | 如何处理缺失值
“排除个别因变量的缺失值”或者"如果 某行缺失,则从所有分析中排除该行" |
返回结果
如果定义一个结果对象(如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
## ───────────────────────────────────────────────────────────────
Figure 2: 配对资料T检验
Figure 3: 配对资料T检验
单样本t检验
Student’s 的单样本t检验用于检验真实平均值等于特定值(通常为零)的零假设。低p值表明无效假设不成立,因此真实平均值必须与测试值不同。
Student’s 的单样本t检验假设数据必要来自正态分布
如果不愿意这样假设,则可以使用非参数Wilcoxon符号秩代替(但是,请注意,Wilcoxon符号秩具有稍微不同的零假设,即中位数等于测试值)。
单样本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检验
|
| bf | 是否提供提供贝叶斯因子
|
| bfPrior | 输入一个介于 0.5 和 2(默认为 0.707)之间的数 字,用于计算贝叶斯因子的先验宽度 |
| wilcoxon | 是否执行Wilcoxon signed rank检验
|
| testValue | 指定零假设值的数字,一般为0 |
| hypothesis | 替代假设
‘different’(默认)、‘oneGreater’ 或者 ‘twoGreater’ - 分别代表 组1 与组2不同、组1大于组2或组2大于组1 |
| norm | 是否执行Shapiro-Wilk正态性检验
|
是否提供残差Q-Q图
|
|
| eqv | 是否执行Levene’s方差齐性检验
|
| meanDiff | 是否提供均数和标准误
|
| ci | 是否提供置信区间
|
| ciWidth | 置信区间的宽度
|
| effectSize | 是否提供效应大小
|
| ciES | 是否提供效应大小的置信区间
|
| ciWidthES | 效应大小的置信区间的宽度
|
| desc | 是否提供描述性统计
|
| plots | 是否提供描述性图片
|
| miss | 如何处理缺失值
“排除个别因变量的缺失值”或者"如果 某行缺失,则从所有分析中排除该行" |
| 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
Figure 4: 单样本的T检验
Figure 5: 单样本的T检验
Figure 6: 单样本的T检验