r语言 不同长度 list 转 dataframe_R语言与SPSS做方差分析(ANOVA)对比

SPSS作为老牌强大数据分析软件,对于笔者这样的小白而言,非常易用,10秒完成一个one-way anova不成问题,唯手熟尔。当因为某些原因不得不用R语言做anova分析时,却碰到诸多问题,通过层层搜索和整理,最终还是完成了与SPSS输出完全一致的R代码,仅供参考。本文主要关注三种最简单的方差分析:one-way anova(单因素方差分析),two-way anova(二因素方差分析)和repeated anova(重复测量方差分析),分别使用SPSS和R语言进行分析对比。

1 one-way anova(单因素方差分析)

数据集:不同种类的饲料对小鼠似乎有不同的增肥效果,如果仅考虑体重,哪一种最好?自变量为饲料种类,因变量为小鼠体重。

2e8f8afe489358417208f670e99b2972.png

SPSS分析过程:

选择[Analyze]-[Compare Means]-[One-Way ANOVA]

f95a7dc00cf1ade15934faa6371abb81.png

将fodder变量放入Factor,weight变量放入Dependent List

76df6bfaa41cca6ee21e03c27506208d.png

在[Post Hoc]选项中勾选Tukey进行事后检验

924daca7b58516d678a84a6469cc0e8e.png

在[Options]中勾选Descriptive,Homogeneity of variance test,和Means plot

55b75f392ff20add811ebde84aea233e.png

点击[OK]输出结果:

c594f62ef5476cd09ffd3c2d4a866721.png
方差同质性检验结果不显著表明满足方差同质性前提

21073e0dad3b92bd290a373d5b944780.png

在one-way anova的输出结果中,F(3, 15) = 157.467,p < .001,表明吃不同饲料的老鼠的体重的确有差异,那么到底吃哪一种饲料增肥效果最好呢?接下来看事后检验的结果:

696be0eedea86ddb05f2854d5af8d9c9.png

可以看到第4种饲料增肥效果最好,为了可视化性更好,看下SPSS出的祖传图:

ed1c2a796057eb636eaa4fb79d5d16a2.png

R语言分析过程:

# 安装和引用库
library(readxl)
library(car)
library(ggpubr)

# 读取数据与数据整理
data <- read_excel("one_way_anova_data.xlsx", sheet = 1)
one_way_dataframe <- as.data.frame(data)

方差同质性检验:

# 方差同质性检验
fodder <- as.factor(one_way_dataframe$fodder)
weight <- one_way_dataframe$weight
leveneTest(weight, fodder, center = "mean")

3444d14877f73425020e61fd29e04222.png
与SPSS一致,方差同质

方差分析:

# 主效应检验
fit_model <- aov(weight ~ fodder)
anova(fit_model)

99b65a6ee39b461859b79413536d7e01.png
与SPSS一致

事后检验(TukeyHSD):

TukeyHSD(fit_model)

4c7718f47338f8a6dc752d4e920a2c93.png

请欣赏R语言出的图:

# 箱图可视化
ggboxplot(one_way_dataframe, x = "fodder", y = "weight", add = "point")

81580d3a9a1f38c55b12511fcac268ae.png

2 two-way anova(二因素方差分析)

数据集:不同的药物和食物搭配对激素水平有着怎样的影响(数据系编造,无任何意义)?自变量为药物种类和食物种类,因变量为激素水平。

d69b29891ab3f76a7e191d35627cffc2.png

SPSS分析过程:

选择[Analyze]-[General Linear Model]-[Univariate]

e654cad06d5d88a828d4872b1249d49c.png

将drug和food变量放入Fixed Factor,weight变量放入Dependent Variable

aacb6f70bb7b0c8f1f1e1f03ccee88a8.png

在[Plots]选项中将drug放入Horizontal Axis,将food放入Separate Lines,并点击[Add]加入绘图序列

764105b8af06fed9d846eebf7be9b77c.png

由于drug和food均只有两个水平,不用选择事后检验。

在[Options]中勾选Descriptive statistics,Estimates of effect size,Observed power,和Homogeneity test

8b64e3376c5155d1bbc2996f57d31116.png

点击[OK]输出结果。

同质性检验结果:

4a3ef2bc2f238c67ec8f34d47b9e3ba1.png
不能再同质了!

二因素方差分析检验结果:

3143b680367a6c15ccb544dbf012be44.png

结果显示不同种类的药物和不同种类的食物对激素水平均有显著影响,且二者的交互作用显著,表明不同药物和食物的搭配会影响激素水平。看下SPSS出的图:

793bfe9e24d610167a528e283e3ff686.png

R语言分析过程:

# 安装和引用库
library(readxl)
library(car)
library(ggpubr)
library(rstatix)

# 读取数据与数据整理
data <- read_excel("two_way_anova_data.xlsx", sheet = 1)
two_way_dataframe <- as.data.frame(data)
two_way_dataframe <- two_way_dataframe %>%
  convert_as_factor(drug, food)

方差同质性检验:

drug <- two_way_dataframe$drug
food <- two_way_dataframe$food
level <- two_way_dataframe$level
leveneTest(level ~ drug*food, center="mean") 

85d2b75e48639a3d4808e192b18a326c.png
与SPSS相同,同质极了,因为数据都是编的

二因素方差分析结果:

# 主效应检验
fit_model <- aov(level ~ drug*food)
anova(fit_model)

7983b808873254ecd791cde29b283409.png

事后检验:

# 事后检验
TukeyHSD(fit_model, which = "drug") # 针对drug自变量的事后检验
TukeyHSD(fit_model, which = "food") # 针对food自变量的事后检验

6163f2b5e9ec9647c99993ebd396928d.png

R语言可视化结果:

# 绘制箱图
ggboxplot(two_way_dataframe, x = "drug", y = "level", color = "food", palette = "jama", add = "point")

e6b0a564dcb9120f80676956068e0d2d.png

3 repeated anova(重复测量方差分析)

数据集:一群人不同时间段的情感水平是否有差异?自变量测量时间,因变量为情感水平。

b923efbc47f4b52113ce1cef460d3c3b.png
非完全数据

SPSS分析过程:

选择[Analyze]-[General Linear Model]-[Repeated Measures]

dbd211aa41fb1b95ab51c25829f6d3f0.png

设定重复度量因子time,因子个数为3个

34bf88ad4f4b64cf3e1783c774aeaf3d.png

将3次测量的数据放入重复测量的3个水平上

3509b3d65e5a2e30bb94006a01f6f5ed.png

在[Plots]选项中将time放入Horizontal Axis,并点击[Add]加入绘图序列

5946e5f2706902ea00a6ddbb7bf3069b.png

在Estimated Marginal Means将time导入右侧,勾选Compare main effects,选择Bonferroni校正,在下方Display栏中勾选Descriptive statistics,Estimates of effect size,Observed power,和Homogeneity test

922c5c773d367e4e662b268be85aaced.png

点击[OK]输出结果。

球形度检验结果:

7d39ab8893a1875a389ec225a462f356.png

球形度检验不显著,表明数据符合球形度假设。

重复测量方差分析结果:

da4b1abd767e8880cf97fbf057ffb0c9.png

球形度假设符合时,应读取第一行结果,可以看出time的主效应显著,表明不同时间测量的情感水平存在差异。

成对比较结果:

5deeb381c787e2b6ce68daf57693203e.png

从成对比较的结果中可以看出,时间1的情感水平最高,时间2的情感水平最低。再看下SPSS出的图:

8fb56336d6957ceab43060c33453cbb5.png

R语言分析过程:

# 安装和引用库
library(ggpubr)
library(rstatix)
library(readxl)
library(car)

# 读取数据与数据整理
data <- read_excel("repeated_anova_data.xlsx", sheet = 1)
subjectID <- rep(c(1:39), times = 3) # 被试编号
time <- c(rep(1,39),rep(2,39),rep(3,39)) # 重复测量
score <- c(data$t1, data$t2, data$t3)
repeated_dataframe <- data.frame(subjectID, time, score)

球形度检验与重复测量方差分析:

repeated_fit <- anova_test(data = repeated_dataframe, dv = score, wid = subjectID, within = time)
repeated_fit

a3977ddc89482c5467a89d792ab7d996.png
包含不满足球形度假设时可参考的校正结果

两两比较,对应SPSS的估计边界均值:

# 使用rstatix库中的pairwise_t_test函数,读取p.adj结果
pwc <- pairwise_t_test(data = repeated_dataframe, score ~ time, paired = T, p.adjust.method = "bonferroni")
pwc

7f4d7c01086665275ea817b60d7e48b3.png

R绘图:

# 箱图
ggboxplot(repeated_dataframe, x = "time", y = "score", add = "point")

8b96a45c594b44b298060773e49bb985.png

这是SPSS和R语言进行三种anova分析的过程,只看数据分析过程的话,SPSS仍然是真爱~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值