古い統計の教科書で、ある国の人口の年齢分布の表を見つけました。
パーセント 年齢人口 ------------------ 0-5 8 5-14 18 14-18 8 18-21 5 21-25 6 25-35 12 35-45 11 45-55 11 55-65 9 65-75 6 75-85 4
この分布を R のヒストグラムとしてプロットしたかったのですが、年齢範囲をブレークとして、人口の割合を密度として使用しましたが、それを行う簡単な方法はないようでした。R のhist()
関数では、このような事前に計算された分布ではなく、個々のデータ ポイントを提供する必要があります。
これが私がそれについて行った方法です。
# Copy original textbook table into two data structures
ageRanges <- list(0:5, 5:14, 14:18, 18:21, 21:25, 25:35, 35:45, 45:55, 55:65, 65:75, 75:85)
pcPop <- c(8, 18, 8, 5, 6, 12, 11, 11, 9, 6, 4)
# Make up "fake" age data points from the distribution described by the table
ages <- lapply(1:length(ageRanges), function(i) {
ageRange <- ageRanges[[i]]
round(runif(pcPop[i] * 100, min=ageRange[1], max=ageRange[length(ageRange)-1]), 0)
})
ages <- unlist(ages)
# Use the endpoints of the age class intervals as breaks for the histogram
breaks <- append(0, sapply(ageRanges, function(x) x[length(x)]))
hist(ages, breaks=breaks)
それについては、あまり冗長でハックな方法が必要なようです。
編集:FWIW、結果のヒストグラムは次のようになります。