度数分布表     Last modified: Sep 02, 2004

目的

度数分布表を作成し,ヒストグラムを描く

使用法

dosuu.bunpu(x, w, percent=FALSE)
freq(x, lo, hi, w)

引数

x        データベクトル
w        階級幅
percent  TRUE にすると縦軸が % 目盛りになる。
lo       階級値下限
hi       階級値上限

ソース

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

# 度数分布表を作成し,ヒストグラムを描く
dosuu.bunpu <- function(x,                           # データベクトル
                        w,                              # 階級幅
                        percent=FALSE)                  # TRUE にすると,縦軸が % 目盛りになる
{
        x <- x[!is.na(x)]                            # 欠損値を持つケースを除く
        y <- floor(x/w)                                      # 階級に分ける
        mn <- min(y)                                 # 最小の階級
        mx <- max(y)                                 # 最大の階級
        y <- y-mn+1                                  # 最小値が1になるように変換
        freq <- table(factor(y, levels=1:(mx-mn+1))) # 度数分布表(度数が 0 になる階級も確保)
        names(freq) <- mn:mx*w                               # 階級名
        pcnt <- freq/sum(freq)*100                   # パーセント
        cum.pcnt <- cumsum(pcnt)                     # 累積パーセント
        h <- if (percent) freq else pcnt             # 縦軸の選択
        barplot(h, axis.lty="solid", space=c(0, 0))     # ヒストグラムとして描く
        return(cbind(freq, pcnt, cum.pcnt))
}


別解

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

# 度数分布表を作成する
freq <- function(    x,                                      # データベクトル
                        lo,                                     # 階級値下限
                        hi,                                     # 階級値上限
                        w)                                      # 階級幅
{
        x <- x[!is.na(x)]                                    # 欠損値を持つケースを除く
        n <- length(x)                                               # サンプルサイズ
        f <- table(cut(x, br = seq(lo, hi, w), right = FALSE))       # 度数分布を得る
        if (n != sum(f)) {
                stop("lo, hi の指定を変えて,範囲を広げてください。")
        }
        res <- cbind(f, f/n*100, cumsum(f)/n*100)            # 度数,相対度数,累積相対度数
        colnames(res) <- c("度数", "相対度数", "累積相対度数")
        return(res)
}


使用例

x <- c(	# データベクトル
	162, 159, 163, 157, 152, 168, 153, 156, 167, 161,
	154, 162, 160, 157, 169, 160, 162, 158, 161, 160,
	163, 160, 163, 153, 164, 163, 163, 153, 155, 155,
	162, 163, 168, 160, 158, 168, 163, 163, 158, 153,
	161, 153, 168, 156, 155, 159, 158, 161, 157, 155,
	161, 156, 167, 156, 158, 152, 160, 160, 155, 157,
	158, 160, 157, 156, 164, 157, 161, 158, 161, 153,
	163, 161, 160, 162, 159, 162, 161, 158, 160, 173
)

dosuu.bunpu(x, 2)

出力結果例

    freq  pcnt cum.pcnt	# 左から順に,階級開始値,頻度,相対頻度(%),累積相対頻度(%)
152    8 10.00    10.00
154    6  7.50    17.50
156   11 13.75    31.25
158   11 13.75    45.00
160   19 23.75    68.75
162   15 18.75    87.50
164    2  2.50    90.00
166    2  2.50    92.50
168    5  6.25    98.75
170    0  0.00    98.75
172    1  1.25   100.00

histogram

別解の出力結果

freq(x, 150, 180, 5)

          frequency percent cum. percent
[150,155)         9   11.25        11.25
[155,160)        27   33.75        45.00
[160,165)        36   45.00        90.00
[165,170)         7    8.75        98.75
[170,175)         1    1.25       100.00
[175,180)         0    0.00       100.00

・ 解説ページ


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

Made with Macintosh