5 対応ありパラメトリック群間差
繰り返しのある一元配置分散分析(repeated one-way ANOVA)です。
以下のようなグラフを描きます。
グラフの描き方としては、3 ノンパラ対応ありでの同一個体データを線で繋ぐ方法と、4 対応のないパラメトリック群間差での平均値±SEMの表示の仕方の合わせ技となります。このページから見てしまうと難しいかもしれませんが、前の章も読んでくれていればどんな関数をどんな目的で使っているかも分かると思います。 https://scrapbox.io/files/63879cbf952e680022c7d301.png
また、反復測定の一元配置分散分析と二元配置以上の分散分析では、僕はANOVA君を使うことにしています。
作成者の井関先生の上記サイトからDLして読み込んで使います。
Rパッケージ化されたものではありませんが、使い勝手が良く、統計にお詳しい日本の研究者からも評判が良い印象です。
全体のscriptは以下です。
code:r
#---------- preparation in advanca 事前準備-------------------------------------------------- # Install packages if not installed 必要なパッケージが無けれな自動でインストール-----
if(!require("tidyverse")) install.packages("tidyverse")
if(!require("dplyr")) install.packages("dplyr")
if(!require("ggplot2")) install.packages("ggplot2")
# clear R's brain 一度参照したリストもしくは変数を次の作業で消す-----
rm(list = ls())
# Load libraries 必要なパッケージの読み込み-----
library(tidyverse)
library(ggplot2)
library(ggfortify) #needed for autoplot() # Data input 今後以下のパスからデータを自動で読み込みする場合-----
library(readr)
CanRsample <- read.csv(file.choose()) #Run and choose CanRsample2021.csv CanRsample_tidy <- gather(CanRsample, key = "Season", value = "aveTemp", aveTemp_SpAut, aveTemp_summer, aveTemp_winter)
# # ----------prep done 準備だん------------------------------------------------------------
aveTempEach.lm <-lm(aveTemp ~ Season, data = CanRsample_tidy)
anovakun(dplyr::select(CanRsample, aveTemp_SpAut, aveTemp_summer, aveTemp_winter), "sA", Season = c("SpAut", "Summer", "Winter"), holm = T, peta = T)
t.test(CanRsample$aveTemp_year, CanRsample$aveTemp_summer, paired=T)
ggplot(CanRsample_tidy, aes(x = Season, y = aveTemp)) +
geom_line(aes(group = ID_town, colour = place), alpha = 0.5) +
scale_color_manual(values = c (Sendai = "deepskyblue3", Tokyo = "gray1", Kagoshima = "orange" )) +
stat_summary(fun.data = mean_se, geom = "errorbar", colour = "black", width = 0.2) + #widthは横線の長さ ggtitle("【5】comparison of means within 平均値の比較 個体内") +
theme_classic(base_size = 22, base_family = "HiraKakuProN-W3") # white backgrond グラフの背景を白に
【統計について】
csvを読み込む時と同じように、ANOVA君のtxtファイルを読み込むコードを書いてあります。2024年3月現在の最新版を読み込んでいます。その後、分散分析をしてくれる anovakun() に対してデータファイルのオブジェクトからダイレクトにデータを読み込むためのコードを書いてあります。select()関数の使い方がピンと来ない人はググって見て下さい。
詳しくは、公式の「ANOVA君の使い方」のページを見て欲しいのですが、
このページのスクリプトでは、データのオブジェクトから使いたい列を取り出して、変数名と水準名を任意に命名できるように、僕が良い感じに整えている感じです。anovakun() で指定するデータオブジェクトは、使うデータのみが過不足なく配置されているオブジェクトじゃないといけないようなので、データのオブジェクトを指定する箇所に
dplyr::select(データのオブジェクト, 水準1となる列名, 水準2となる列名, 水準3となる列名)
というカタチで書きました。ちなみに、dplyr::としているのは、selectという関数が、dplyrパッケージ以外にも存在するために、Rがときおり正しく挙動しなくなることがあるためです(ちゃんと動くこともあるんですが)。「パッケージ名::関数名」と書くと、使いたい関数を迷いなくRに指定することができる、そんな書き方です。
もう1つ、ANOVA君の要因の指定の方法について、簡単に。
anovakun(データのオブジェクト, "XsX", 水準の指定)という感じで書いていくわけですが、データの次に指定している "XsX" の部分が、データの構造の指定の仕方です。
sの左が参加者間要因、sの右が参加者内要因です。
【between】s【within】
です!
今回は、1要因でwithinなので、"sA" と指定しています。
被験者間 x 被験者内 のtwo-way なら "AsB"と指定するわけです。
さて、繰り返しのある一元配置分散分析の結果は有意です。後検定まで一気にやってくれます。
その後に、個別の2条件間で対応のあるt検定をするためのコードも、一応書きました。
【グラフ描画】
以下に、モノクロ版、平均値を記さずに線を引くだけ、など、ちょっとした改変verのスクリプトも置いておきます。
https://scrapbox.io/files/63879ccaa060c20020089b92.png
code:r
ggplot(CanRsample_tidy, aes(x = Season, y = aveTemp)) +
geom_line(aes(group = ID_town), color = "grey", alpha = 0.5) +
stat_summary(fun.data = mean_se, geom = "errorbar", colour = "black", width = 0.2) + #widthは横線の長さ ggtitle("【5_2】1wayMono withinモノクロ") +
theme_classic(base_size = 22, base_family = "HiraKakuProN-W3") # white backgrond グラフの背景を白に
https://scrapbox.io/files/63879d61995115001dfdb802.png
code:r
#【5_3】simple within-comparison only line 個体内比較 同一個体に線を引くだけ---------------------------- geom_point(shape = 21, size = 4, aes(fill = place), width = 0.2, alpha = 0.7) +
scale_fill_manual(values = c (Sendai = "deepskyblue3", Tokyo = "gray1", Kagoshima = "orange" )) +
scale_color_manual(values = c (Sendai = "deepskyblue3", Tokyo = "gray1", Kagoshima = "orange" )) +
ggtitle("【5_3】同一個体に色付きで線を引くだけ") +
theme_classic(base_size = 18, base_family = "HiraKakuProN-W3") # white backgrond グラフの背景を白に