目的 対数尤度比に基づく独立性の検定を行う。 この関数は htest クラス・オブジェクトを返すので,結果は print.htest により表示される。 使用法 G2(mat, correct=FALSE) 引数 mat 分割表 correct Williams の連続性の補正を行うときに TRUE とする 省略されたときには,連続性の補正は行わない ソース インストールは,以下の 1 行をコピーし,R コンソールにペーストする source("http://aoki2.si.gunma-u.ac.jp/R/src/G2.R", encoding="euc-jp") # 対数尤度比に基づく独立性の検定を行う(htest クラスの結果を返す) G2 <- function( mat, # 分割表(合計欄を除く) correct=FALSE) # Williams の連続性の補正を行うときに TRUE にする { ln <- function(n) sum(ifelse(n == 0, 0, n*log(n))) # n*ln(n) を適切に行う関数 data.name <- deparse(substitute(mat)) method <- "対数尤度比に基づく独立性の検定(G-squared test)" n <- sum(mat) # 全サンプルサイズ n1 <- rowSums(mat) # 行和 n2 <- colSums(mat) # 列和 G2 <- 2*(ln(mat)-ln(n1)-ln(n2)+ln(n)) # G 統計量 a <- nrow(mat) # 分割表の行数 b <- ncol(mat) # 分割表の列数 df <- (a-1)*(b-1) # G の自由度 if (correct == TRUE) { # 連続性の補正 method <- paste(method, "連続性の補正") G2 <- G2/(1+(n*sum(1/n1)-1)*(n*sum(1/n2)-1)/(6*n*a*b)) } P <- pchisq(G2, df, lower.tail=FALSE) # P 値 names(G2) <- "G-squared" names(df) <- "df" return(structure(list(statistic=G2, parameter=df, p.value=P, method=method, data.name=data.name, observed=mat), class="htest")) # 結果をまとめて返す } G2(matrix(c(5, 5, 1, 6, 4, 4, 2, 2, 1), byrow=TRUE, nc=3)) G2(matrix(c(4, 5, 2, 0, 0, 7, 6, 1, 1, 0, 3, 1), byrow=TRUE, nc=4)) G2(matrix(c(4, 5, 2, 0, 0, 7, 6, 1, 1, 0, 3, 1), byrow=TRUE, nc=4), correct=TRUE) 使用例 > G2(matrix(c(5, 5, 1, 6, 4, 4, 2, 2, 1), byrow=TRUE, nc=3)) 対数尤度比に基づく独立性の検定(G-squared test) data: matrix(c(5, 5, 1, 6, 4, 4, 2, 2, 1), byrow = TRUE, nc = 3) G-squared = 1.8024, df = 4, p-value = 0.772 > G2(matrix(c(4, 5, 2, 0, 0, 7, 6, 1, 1, 0, 3, 1), byrow=TRUE, nc=4)) 対数尤度比に基づく独立性の検定(G-squared test) data: matrix(c(4, 5, 2, 0, 0, 7, 6, 1, 1, 0, 3, 1), byrow = TRUE, nc = 4) G-squared = 15.3646, df = 6, p-value = 0.0176 > G2(matrix(c(4, 5, 2, 0, 0, 7, 6, 1, 1, 0, 3, 1), byrow=TRUE, nc=4), correct=TRUE) # 連続性の補正を行うとき 対数尤度比に基づく独立性の検定(G-squared test) 連続性の補正 data: matrix(c(4, 5, 2, 0, 0, 7, 6, 1, 1, 0, 3, 1), byrow = TRUE, nc = 4) G-squared = 13.7765, df = 6, p-value = 0.0322