目的 度数分布表を作成し,ヒストグラムを描く 使用法 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 別解の出力結果 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 解説ページ