二元配置分散分析
二元配置分散分析(繰り返しあり)
二元配置分散分析(two-way ANOVA)とは,2つの因子が目的変数に与える影響を同時に検討する分散分析手法である.この手法では,以下の3つの効果を評価する:
・因子Aの主効果
・因子Bの主効果
・交互作用効果(interaction effect)
交互作用とは,一方の因子の効果が他方の因子の水準によって異なる現象を指す.
例:同一条件下で複数人の被験者に測定を行った場合の治療法,重症度の効果および交叉作用の効果を検証
対象:18名
因子A:治療法(k法・m法)
因子B:重症度(重度・中等度・軽度)
目的変数:リハビリ効果

Rのコード
data <- data.frame(
treatment = factor(c(
rep("k法", 9),
rep("m法", 9)
)),
severity = factor(c(
rep(c("重度","中等度","軽度"), each = 3),
rep(c("重度","中等度","軽度"), each = 3)
),
levels = c("重度","中等度","軽度")),
effect = c(
# k法
10,11,15, # 重度
15,16,16.5, # 中等度
20,21,25, # 軽度
# m法
14,17,13, # 重度
18,19,17, # 中等度
29,24,26 # 軽度
)
)
View(data)

Rのコード
library(ggplot2)
ggplot(data, aes(x = severity, y = effect, color = treatment)) +
# 生データ
geom_jitter(
position = position_jitterdodge(jitter.width = 0.1, dodge.width = 0.4),
size = 2,
alpha = 0.7
) +
# 平均値(横線)
stat_summary(
fun = mean,
geom = "crossbar",
width = 0.4,
fatten = 0,
linewidth = 1, # ← 修正ポイント
position = position_dodge(width = 0.4),
show.legend = FALSE
) +
labs(
x = "重症度",
y = "効果",
color = "治療法",
title = "全データ+平均値(横線表示)"
) +
theme_minimal()
二元配置分散分析(繰り返しなし)
二元配置分散分析(without replication)とは,2つの因子が目的変数に与える影響を同時に検討する分散分析のうち,各条件の組合せ(セル)に対して観測値が1つしか得られていない場合を指す.
各セルに観測値が1つしか存在しないため,観測値のずれが「交互作用によるもの」なのか「個体差や測定誤差などの誤差によるもの」なのかを区別できない.すなわち,交互作用とセル内誤差(純粋誤差)を分離して評価することができない。
このため,交互作用が存在しない(あるいは無視できる)ことを前提として,交互作用を含んだ残差を誤差項に用いて因子Aおよび因子Bの主効果を検定する。一方,交互作用効果を独立に検定することは原則としてできない。
例:「治療法」と「重症度」がリハビリ効果に与える影響を検証
対象:6名(各治療法×重症度の組合せに1名ずつ割り付けられている)
因子A:治療法(k法・m法)
因子B:重症度(重度・中等度・軽度)
目的変数:リハビリ効果

Rのコード
treatment <- factor(c("k法","k法","k法",
"m法","m法","m法"))
severity <- factor(c("重度","中等度","軽度",
"重度","中等度","軽度"),
levels = c("重度","中等度","軽度"))
# リハビリ効果(例)
effect <- c(10, 15, 20,
14, 18, 25)
data <- data.frame(treatment, severity, effect)
View(data)

Rのコード
library(ggplot2)
ggplot(data, aes(x = severity, y = effect, color = treatment)) +
geom_point(
position = position_dodge(width = 0.4),
size = 4
) +
labs(
x = "重症度",
y = "効果",
color = "治療法",
title = "二元配置(replicationなし):各セルの値"
) +
theme_minimal()
二元配置反復測定分散分析 mixed design
二元配置反復測定分散分析(Two-way mixed-design ANOVA)とは,2つの因子が目的変数に与える影響を同時に検討する分散分析のうち,一方が被験者間要因(between-subject factor),もう一方が被験者内要因(within-subject factor)である場合を指す。
被験者間要因とは,被験者ごとに異なる条件に割り付けられる因子であり,例えば治療法の違いが該当する。一方,被験者内要因とは,同じ被験者に対して繰り返し測定される因子であり,測定時期や測定条件の違いが該当する。被験者内要因では同一被験者を繰り返し測定するため,被験者間の個人差を考慮したうえで効果を評価することができる。
この分析では,被験者間要因の主効果,被験者内要因の主効果に加え,両因子の交互作用を検定することができる。交互作用が有意であれば,一方の因子の効果が他方の因子の水準によって異なることを意味する。例えば,治療法による改善の程度が測定時期によって異なる場合には交互作用が認められる。
例:「治療法」と「測定時期」がリハビリ効果に与える影響を検証
対象:6名
因子A:治療法(被験者間因子)
因子B:測定時期(被験者内因子,反復測定因子)
目的変数:リハビリ効果

Rのコード
data <- data.frame(
subject = factor(rep(1:6, each = 3)),
treatment = factor(rep(c("k法","m法"), each = 9)),
time = factor(rep(c("治療前","1か月後","2か月後"), times = 6),
levels = c("治療前","1か月後","2か月後")),
effect = c(
# k法群
10,15,20,
11,16,21,
12,17,22,
# m法群
13,18,26,
14,19,27,
15,20,28
)
)
View(data)

Rのコード
data <- data.frame(
subject = factor(rep(1:6, each = 3)),
treatment = factor(rep(c("k法","m法"), each = 9)),
time = factor(rep(c("治療前","1か月後","2か月後"), times = 6),
levels = c("治療前","1か月後","2か月後")),
effect = c(
# k法群
10,15,20,
11,16,21,
12,17,22,
# m法群(少し差をつける)
13,18,26,
14,19,27,
15,20,28
)
)
time_num <- as.numeric(data$time)
plot(range(time_num), range(data$effect),
type = "n",
xaxt = "n",
xlab = "時間",
ylab = "効果",
main = "被験者ごとの推移")
axis(1, at = 1:3, labels = levels(data$time))
for (s in unique(data$subject)) {
d <- subset(data, subject == s)
col <- ifelse(as.character(unique(d$treatment)) == "k法",
"blue", "red")
lines(as.numeric(d$time), d$effect,
type = "b",
pch = 16,
col = col)
}
legend("topleft",
legend = c("k法", "m法"),
col = c("blue", "red"),
lty = 1,
pch = 16)
二元配置反復測定分散分析
二元配置反復測定分散分析(Two-way repeated measures ANOVA)とは,2つの因子が目的変数に与える影響を同時に検討する分散分析のうち,両方の因子が被験者内要因(within-subject factor)である場合を指す.主効果および交互作用を評価する点は mixed design ANOVA と共通している.
被験者内要因とは,同じ被験者に対して繰り返し測定される因子であり,測定時期や測定条件の違いが該当する.二元配置反復測定分散分析では,すべての被験者が両因子のすべての水準を経験する.
この分析では,因子Aの主効果,因子Bの主効果に加え,両因子の交互作用を検定することができる.交互作用が有意であれば,一方の因子の効果が他方の因子の水準によって異なることを意味する.
また,同一被験者を繰り返し測定するため,被験者間の個人差の影響を抑えた状態で因子の効果を評価できる.
例)歩行速度条件(快適速度・最大速度)と測定時期(治療前・1か月後・2か月後)を同じ被験者全員に対して測定した.
対象:6名
因子A:歩行速度条件(被験者内因子,反復測定因子)
因子B:測定時期(被験者内因子,反復測定因子)
目的変数:リハビリ効果

Rのコード
data <- data.frame(
subject = factor(rep(1:6, each = 6)),
condition = factor(rep(c("快適速度歩行","最大速度歩行"),
each = 3, times = 6)),
time = factor(rep(c("治療前","1か月後","2か月後"),
times = 12),
levels = c("治療前","1か月後","2か月後")),
gait_speed = c(
# 被験者1
0.80, 0.95, 1.10, 1.10, 1.15, 1.31,
# 被験者2
0.75, 0.85, 0.90, 1.05, 1.11, 1.20,
# 被験者3
0.85, 0.85, 1.00, 1.08, 1.10, 1.35,
# 被験者4
0.70, 0.85, 1.10, 1.12, 1.15, 1.30,
# 被験者5
0.78, 0.93, 1.08, 1.08, 1.12, 1.20,
# 被験者6
0.82, 0.97, 1.12, 1.12, 1.27, 1.42
)
)
View(data)

Rのコード
library(ggplot2)
ggplot(
data,
aes(
x = time,
y = gait_speed,
group = interaction(subject, condition),
color = condition
)
) +
geom_line(linewidth = 1) +
geom_point(size = 2) +
facet_wrap(~ subject, nrow = 2) +
labs(
title = "二元配置反復測定分散分析の例",
x = "測定時期",
y = "歩行速度",
color = "快適速度と最大速度"
) +
theme_bw() +
theme(
legend.position = "bottom"
)

Rのコード
library(dplyr)
library(ggplot2)
summary_data <- data %>%
group_by(condition, time) %>%
summarise(
mean = mean(gait_speed),
sd = sd(gait_speed),
n = n(),
se = sd / sqrt(n),
.groups = "drop"
)
ggplot(
summary_data,
aes(
x = time,
y = mean,
group = condition,
color = condition
)
) +
geom_line(linewidth = 1.2) +
geom_point(size = 3) +
geom_errorbar(
aes(
ymin = mean - se,
ymax = mean + se
),
width = 0.1
) +
labs(
title = "交互作用プロット",
x = "測定時期",
y = "平均",
color = "快適or最大"
) +
theme_bw() +
theme(
legend.position = "bottom"
)
本記事の作成にあたり、AIを用いて文章表現および構成の補助を行っています。掲載内容については管理者が統計学的観点および実務上の妥当性を確認・修正したうえで公開しており、その内容に関する責任は管理者にあります。
