対応のある平均値の差の検定 Last modified: Aug 20, 2009
目的
二次データに基づき,対応のある平均値の差の検定を行う
注: 一次データが利用できる場合には,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
対応のある平均値の差の検定
直前のページへ戻る
E-mail to Shigenobu AOKI