目的 二次データに基づき,対応のある平均値の差の検定を行う 注: 一次データが利用できる場合には,R に本来用意されている t.test を使うことができる 使用法 paired.t.test(x, y) # 原データから検定 paired.t.test(mx, my, ux2, uy2, r, n) # 二次データから検定 引数 x, y 一次データから検定を行うときは対応のあるベクトル, 二次データから検定を行うときは対応のある二つの平均値 ux2, uy2 二次データから検定を行うときは対応のある二つの標準偏差 r 二次データから検定を行うとき,対応のあるデータ間の相関係数 n 二次データから検定を行うとき,データの組数 ソース インストールは,以下の 1 行をコピーし,R コンソールにペーストする source("http://aoki2.si.gunma-u.ac.jp/R/src/paired_t_test.R", encoding="euc-jp") # 対応のある平均値の差の検定 paired.t.test <- function( x, y, # 一次データから検定を行うときは対応のあるベクトル, # 二次データから検定を行うときは対応のある二つの平均値 ux2=NULL, uy2=NULL, # 二次データから検定を行うときは対応のある二つの標準偏差 r=NULL, # 二次データから検定を行うとき,対応のあるデータ間の相関係数 n=NULL) # 二次データから検定を行うとき,データの組数 { method <- "対応のある平均値の差の検定" if (is.null(ux2)) { # 一次データについて検定 data.name <- paste(deparse(substitute(x)), "and", deparse(substitute(y))) OK <- complete.cases(x, y) # 欠損値を持つケースを除く x <- x[OK] y <- y[OK] n <- length(x) # サンプルサイズ x <- x-y # 差を取って, t <- abs(mean(x))/(sd(x)/sqrt(n)) # 検定 } else { # 二次データについて検定 data.name <- sprintf("\nmean1 = %s, variance1 = %s\nmean2 = %s, variance2 = %s\nr = %s, n = %s", x, ux2, y, uy2, r, n) t <- abs(x-y)/sqrt((ux2+uy2-2*r*sqrt(ux2*uy2))/n) } df <- n-1 # 自由度 p <- pt(t, df, lower.tail=FALSE)*2 # P 値 return(structure(list(statistic=c(t=t), parameter=c(df=df), p.value=p, method=method, data.name=data.name), class="htest")) } 使用例 二次データから検定する場合 > x <- c(-1.1, -1.1, -0.5, -3.3, 0.0, -1.1, 1.6, 1.6, -0.7) > y <- c(-1.5, -0.7, -0.8, -2.7, 0.1, -0.4, 0.5, 0.2, -0.3) > paired.t.test(mean(x), mean(y), var(x), var(y), cor(x, y), length(x)) 対応のある平均値の差の検定 data: mean1 = -0.511111111111111, variance1 = 2.25361111111111 mean2 = -0.622222222222222, variance2 = 0.966944444444444 r = 0.90078402975565, n = 9 t = 0.445, df = 8, p-value = 0.6681 一次データから検定する場合 > paired.t.test(x, y) 対応のある平均値の差の検定 data: x and y t = 0.445, df = 8, p-value = 0.6681 対応のある平均値の差の検定