<- read.csv("datasets/20210801.csv",header = T)
df
str(df)
## 'data.frame': 60 obs. of 5 variables:
## $ 组别 : chr "实验组" "实验组" "实验组" "实验组" ...
## $ 排便困难: int 12 11 15 14 11 13 11 14 13 15 ...
## $ 生活质量: int 87 94 95 85 101 91 84 89 84 92 ...
## $ 粪便性状: int 2 3 2 2 3 3 3 3 3 3 ...
## $ 排便时间: int 2 2 2 2 2 2 2 3 2 2 ...
head(df)
## 组别 排便困难 生活质量 粪便性状 排便时间
## 1 实验组 12 87 2 2
## 2 实验组 11 94 3 2
## 3 实验组 15 95 2 2
## 4 实验组 14 85 2 2
## 5 实验组 11 101 3 2
## 6 实验组 13 91 3 2
10 R语言“tidy”流统计分析
10.1 简介
虽然说是同时进行t检验,但是这是一种通用的方法,当然也可以同时进行方差分析、正态性检验、方差齐性检验、秩和检验等等。
前面的介绍多数是基于R语言自带的函数进行医学统计学分析,下面介绍一个比较现代化、用法也更加简单直接的方法,也就是基于rstatix
这个包实现。
rstatix
提供一个简单直观的管道友好的框架,与整洁的设计理念一致,用于执行基本的统计检验,包括t检验,Wilcoxon检验,方差分析,Kruskal-Wallis和相关性分析等。每个分析的输出会自动转换成一个整洁的数据框架,以方便可视化。
附加功能可用于重塑,重新排序,操作和可视化相关矩阵。功能还包括析因实验的分析,包括重复测量设计、析因设计、正交设计等。
还可以计算几个效应大小指标,包括方差分析eta平方,t检验的Cohen’s-d和分类变量之间的关联的Cramer’s-v。 该软件包包含用于识别单变量和多变量异常值、评估正态性和方差齐性的辅助函数。
在spss中进行这些检验时,不管有多少列变量,只要都选中,就可以一次全部进行检验,在R语言里当然也可以!
主要是通过rstatix
这个包完成,数据格式要求是长数据。
10.2 实战
下面通过一个例子进行说明,可能有些不太适当,只是演示使用方法。
60个病人随机分为实验组和对照组,每组30人,记录患者的4项评分,现在需要对这4项评分同时进行正态性和方差齐性检验和t检验(可能不符合t检验的条件,这里只是演示方法)。
df
这样的数据是宽数据,首先变成长数据:
suppressMessages(library(tidyverse))
<- df %>%
df_l pivot_longer(cols = 2:5, names_to = "变量", values_to = "积分") %>%
::mutate_if(is.character, as.factor)
dplyr
str(df_l)
## tibble [240 × 3] (S3: tbl_df/tbl/data.frame)
## $ 组别: Factor w/ 2 levels "对照组","实验组": 2 2 2 2 2 2 2 2 2 2 ...
## $ 变量: Factor w/ 4 levels "粪便性状","排便困难",..: 2 4 1 3 2 4 1 3 2 4 ...
## $ 积分: int [1:240] 12 87 2 2 11 94 3 2 15 95 ...
head(df_l)
## # A tibble: 6 × 3
## 组别 变量 积分
## <fct> <fct> <int>
## 1 实验组 排便困难 12
## 2 实验组 生活质量 87
## 3 实验组 粪便性状 2
## 4 实验组 排便时间 2
## 5 实验组 排便困难 11
## 6 实验组 生活质量 94
同时进行正态性检验:
library(rstatix)
%>% group_by(变量,组别) %>% shapiro_test(积分)
df_l ## # A tibble: 8 × 5
## 组别 变量 variable statistic p
## <fct> <fct> <chr> <dbl> <dbl>
## 1 对照组 粪便性状 积分 0.452 1.73e- 9
## 2 实验组 粪便性状 积分 0.404 5.98e-10
## 3 对照组 排便困难 积分 0.871 1.78e- 3
## 4 实验组 排便困难 积分 0.915 1.95e- 2
## 5 对照组 排便时间 积分 0.577 3.91e- 8
## 6 实验组 排便时间 积分 0.597 6.64e- 8
## 7 对照组 生活质量 积分 0.974 6.47e- 1
## 8 实验组 生活质量 积分 0.962 3.46e- 1
方差齐性检验:
%>% group_by(变量) %>% levene_test(积分 ~ 组别)
df_l ## # A tibble: 4 × 5
## 变量 df1 df2 statistic p
## <fct> <int> <int> <dbl> <dbl>
## 1 粪便性状 1 58 0.127 0.723
## 2 排便困难 1 58 0.226 0.636
## 3 排便时间 1 58 0.0746 0.786
## 4 生活质量 1 58 3.96 0.0514
t检验:
%>% group_by(变量) %>% t_test(积分 ~ 组别)
df_l ## # A tibble: 4 × 9
## 变量 .y. group1 group2 n1 n2 statistic df p
## * <fct> <chr> <chr> <chr> <int> <int> <dbl> <dbl> <dbl>
## 1 粪便性状 积分 对照组 实验组 30 30 -0.356 57.5 0.723
## 2 排便困难 积分 对照组 实验组 30 30 0.0890 57.4 0.929
## 3 排便时间 积分 对照组 实验组 30 30 -0.273 58.0 0.786
## 4 生活质量 积分 对照组 实验组 30 30 -0.101 52.4 0.92
非常方便,结果也是一目了然,再也不用羡慕SPSS的这一点了!
你又多了一个用R语言进行医学统计学的理由!