目的 二次データから,二群の平均値の差の検定を行う。 注: 一次データが利用できる場合には,R に本来用意されている t.test を使うことができる 使用法 my.t.test(nx, mx, ux, ny, my, uy, var.equal = FALSE) 引数 nx 第一群のデータ個数 mx 第一群の平均値 vx 第一群の不偏分散 ny 第二群のデータ個数 my 第二群の平均値 vy 第二群の不偏分散 var.equal 等分散性を仮定するとき TRUE,そうでないときは省略するか FALSE ソース インストールは,以下の 1 行をコピーし,R コンソールにペーストする source("http://aoki2.si.gunma-u.ac.jp/R/src/my_t_test.R", encoding="euc-jp") # 二次データから,二群の平均値の差の検定を行う my.t.test <- function( nx, # 第一群のデータ個数 mx, # 第一群の平均値 ux, # 第一群の不偏分散 ny, # 第二群のデータ個数 my, # 第二群の平均値 uy, # 第二群の不偏分散 var.equal = FALSE) # 等分散を仮定するか { data.name <- sprintf("\nn1 = %s, mean1 = %s, variance1 = %s\nn2 = %s, mean2 = %s, variance2 = %s", nx, mx, ux, ny, my, uy) if (var.equal) { # 等分散を仮定するとき, method <- "等分散を仮定した,二群の平均値の差の検定" df <- nx+ny-2 # 自由度 v <- ((nx-1)*ux+(ny-1)*uy)/df # プールした不偏分散 tstat <- abs(mx-my)/sqrt(v*(1/nx+1/ny)) # 検定統計量 } else { # 等分散を仮定しないとき method <- "ウエルチの方法による,二群の平均値の差の検定" tstat <- abs(mx-my)/sqrt(ux/nx+uy/ny) # 検定統計量 df <- (ux/nx+uy/ny)^2/((ux/nx)^2/(nx-1)+(uy/ny)^2/(ny-1)) # 自由度(小数点つき) } P <- 2*pt(tstat, df, lower.tail=FALSE) # P 値 names(tstat) <- "t" names(df) <- "df" return(structure(list(statistic=tstat, parameter=df, p.value=P, method=method, data.name=data.name), class="htest")) } 使用例 > my.t.test(36, 82.6, 15.3, 43, 84.5, 16.2, var.equal=TRUE) # 等分散性を仮定する場合 等分散を仮定した,二群の平均値の差の検定 data: n1 = 36, mean1 = 82.6, variance1 = 15.3 n2 = 43, mean2 = 84.5, variance2 = 16.2 t = 2.1165, df = 77, p-value = 0.03753 > my.t.test(42, 15.2, 1.1, 63, 12.7, 3.2, var.equal=FALSE) # 等分散性を仮定しない場合 ウエルチの方法による,二群の平均値の差の検定 data: n1 = 42, mean1 = 15.2, variance1 = 1.1 n2 = 63, mean2 = 12.7, variance2 = 3.2 t = 9.0103, df = 101.581, p-value = 1.296e-14 解説ページ