二項分布への適合度の検定     Last modified: Aug 19, 2009

目的

二項分布への適合度の検定を行う

使用法

binomdist(d, x, size)
summary.binomdist(obj, digits=5)
plot.binomdist(obj, ...)

引数

d       度数分布ベクトル
x       階級値ベクトル
size    試行回数
obj     binomdist 関数が返すオブジェクト
digits  表示桁数
...     barplot に渡す引数

ソース

インストールは,以下の 1 行をコピーし,R コンソールにペーストする
source("http://aoki2.si.gunma-u.ac.jp/R/src/binomdist.R", encoding="euc-jp")

# 二項分布への適合度の検定
binomdist <- function(       d,                                      # 度数分布ベクトル
                        x,                                      # 階級値ベクトル
                        size)                                   # 試行回数
{
        data.name <- paste( "\n度数分布ベクトル:", deparse(substitute(d)),
                        "\n階級値ベクトル: ", deparse(substitute(x)),
                        "\n試行回数:    ", deparse(substitute(size)), sep="")
        method <- "二項分布への適合度の検定"
        k <- length(d)                                               # 階級数
        if (k != length(x)) {
                stop("度数ベクトル d と階級値ベクトル x の長さが違います")
        }
        else if (any(floor(d) != d)) {
                stop("度数ベクトル中に小数値があります")
        }
        else if (any(d < 0)) {
                stop("度数ベクトル中に負の値があります")
        }
        else if (any(x > size)) {
                stop("階級値ベクトル中に試行数より大きい数値があります")
        }
        else if (any(x < 0)) {
                stop("階級値ベクトル中に負の数値があります")
        }
        else if (any(floor(x) != x)) {
                stop("階級値ベクトル中に小数値があります")
        }
        n <- sum(d)                                          # サンプルサイズ
        prob <- sum(d*x)/n/size                                      # 母比率
        p <- dbinom(x, size, prob)                           # 二項分布の確率
        e <- n*p                                             # 期待値
        table <- data.frame(x, d, p, e)
        rownames(table) <- paste("c-", x, sep="")
        while (e[1] < 1) {                                   # 1 未満のカテゴリーの併合
                d[2] <- d[2]+d[1]
                e[2] <- e[2]+e[1]
                d <- d[-1]
                e <- e[-1]
                k <- k-1
        }
        while (e[k] < 1) {                                   # 1 未満のカテゴリーの併合
                d[k-1] <- d[k-1]+d[k]
                e[k-1] <- e[k-1]+e[k]
                d <- d[-k]
                e <- e[-k]
                k <- k-1
        }
        chisq <- sum((d-e)^2/e)                                      # カイ二乗統計量
        df <- k-2                                            # 自由度
        p <- pchisq(chisq, df, lower.tail=FALSE)             # P 値
        names(chisq) <- "X-squared"
        names(df) <- "df"
        return(structure(list(statistic=chisq, parameter=df,
                p.value=p, estimate=c(n=n, probability=prob), method=method,
                data.name=data.name, table=table),
                class=c("htest", "binomdist")))
}
# summary メソッド(適合度に関する結果を表示する)
summary.binomdist <- function(       obj,                            # binomdist が返すオブジェクト
                                digits=5)                       # 表示桁数
{
        table <- obj$table
        colnames(table) <- c("級", "度数", "確率", "期待値")
        cat("\n適合度\n\n")
        print(table, digits=digits, row.names=FALSE)
}
# plot メソッド(観察度数と理論度数を図示する)
plot.binomdist <- function(  obj,                            # binomdist が返すオブジェクト
                                ...)                            # barplot 関数へ渡す引数
{
        table <- obj$table
        nr <- nrow(table)
        barplot(table$d, space=0, ...)                          # 観察度数を barplot で描く
        old <- par(xpd=TRUE)
        points(1:nr-0.5, table$e, pch=3)                        # は理論度数を,記号 + で示す
        text(1:nr-0.5, -strheight("H"), table$x)                # 階級表示
        par(old)
}


使用例

(a <- binomdist(c(2, 14, 20, 34, 22, 8), 0:5, 5))
summary(a)
plot(a)

出力結果例

> (a <- binomdist(c(2, 14, 20, 34, 22, 8), 0:5, 5))
	二項分布への適合度の検定

data:  
度数分布ベクトル:c(2, 14, 20, 34, 22, 8)
階級値ベクトル: 0:5
試行回数:    5 
X-squared = 4.0076, df = 4, p-value = 0.405
sample estimates:
          n probability 
    100.000       0.568 

> summary(a)

適合度

 階級 度数     確率   期待値
    0    2 0.015046   1.5046
    1   14 0.098913   9.8913
    2   20 0.260105  26.0105
    3   34 0.341989  34.1989
    4   22 0.224826  22.4826
    5    8 0.059121   5.9121

> plot(a)

fig

・ 解説ページ


・ 直前のページへ戻る  ・ E-mail to Shigenobu AOKI

Made with Macintosh