石田さんのページで、
Rの備忘録
R の boxplot で,四分位数範囲とヒンジ散布度のカンケーがどうなってたか,すぐ忘れる
四分位数範囲Interquartile range:IQR は第3四分位数の第1四分位数の差
ヒンジ散布度 hinge spread は上側ヒンジ(中央値より上の値の中央値)と下側ヒンジ(中央値より下の値の中央値)の差
従って二つは一致しない.
R では前者が使われているが,?boxplot.stats を実行すると以下のような説明がある
とある。四分位数範囲 = 第 3 四分位 - 第 1 四分位
上側ヒンジ = 中央値より上の値の中央値 = 第 3 四分位
下側ヒンジ = 中央値より下の値の中央値 = 第 1 四分位
よってその差ヒンジ散布度は、四分位数範囲と同じになるべきもの
定義通りにやると確かに違う値になる場合があるが,それを記述する条件が複雑。そのあたりがわかっても,わからなくっても,大勢に影響はない。
fivenum はヒンジを求める。quantile は第 1,第 3 四分位を求める。
quantile は求め方が 9 通りもある!!
ちなみに,
> fivenum(1:9)
[1] 1 3 5 7 9
となるので,
1 2 3 4 5 6 7 8 9
の下ヒンジは,1 2 3 4 5 の中央値を求めていることがわかる(上ヒンジは 5 6 7 8 9 の中央値)。
したがって,上の石田さんの記述
「下側ヒンジは中央値より下の値の中央値」は,正確に言えば「下側ヒンジは中央値以下の値の中央値」
「上側ヒンジは中央値より上の値の中央値」は,正確に言えば「上側ヒンジは中央値以上の値の中央値」
ということになる。
> set.seed(1234567)
> x <- rnorm(600)
> y <- x[-1]
> cat("length(x) =", length(x), " length(y) =", length(y), "\n")
length(x) = 600 length(y) = 599
> (fivenum(x)==quantile(x))[c(2,4)]
25% 75%
FALSE FALSE
> (fivenum(y)==quantile(y))[c(2,4)]
25% 75%
TRUE TRUE
> #
> x <- x[-1]
> y <- y[-1]
> cat("length(x) =", length(x), " length(y) =", length(y), "\n")
length(x) = 599 length(y) = 598
> (fivenum(x)==quantile(x))[c(2,4)]
25% 75%
TRUE TRUE
> (fivenum(y)==quantile(y))[c(2,4)]
25% 75%
FALSE FALSE
> #
> x <- x[-1]
> y <- y[-1]
> cat("length(x) =", length(x), " length(y) =", length(y), "\n")
length(x) = 598 length(y) = 597
> (fivenum(x)==quantile(x))[c(2,4)]
25% 75%
FALSE FALSE
> (fivenum(y)==quantile(y))[c(2,4)]
25% 75%
TRUE TRUE
> #
> x <- x[-1]
> y <- y[-1]
> cat("length(x) =", length(x), " length(y) =", length(y), "\n")
length(x) = 597 length(y) = 596
> (fivenum(x)==quantile(x))[c(2,4)]
25% 75%
TRUE TRUE
> (fivenum(y)==quantile(y))[c(2,4)]
25% 75%
FALSE FALSE
Rの備忘録
R の boxplot で,四分位数範囲とヒンジ散布度のカンケーがどうなってたか,すぐ忘れる
四分位数範囲Interquartile range:IQR は第3四分位数の第1四分位数の差
ヒンジ散布度 hinge spread は上側ヒンジ(中央値より上の値の中央値)と下側ヒンジ(中央値より下の値の中央値)の差
従って二つは一致しない.
R では前者が使われているが,?boxplot.stats を実行すると以下のような説明がある
The two ‘hinges’ are versions of the first and third quartile, i.e., close to ‘quantile(x, c(1,3)/4)’.
The hinges equal the quartiles for odd n (where ‘n
The hinges equal the quartiles for odd n (where ‘n
とある。四分位数範囲 = 第 3 四分位 - 第 1 四分位
上側ヒンジ = 中央値より上の値の中央値 = 第 3 四分位
下側ヒンジ = 中央値より下の値の中央値 = 第 1 四分位
よってその差ヒンジ散布度は、四分位数範囲と同じになるべきもの
定義通りにやると確かに違う値になる場合があるが,それを記述する条件が複雑。そのあたりがわかっても,わからなくっても,大勢に影響はない。
fivenum はヒンジを求める。quantile は第 1,第 3 四分位を求める。
quantile は求め方が 9 通りもある!!
ちなみに,
> fivenum(1:9)
[1] 1 3 5 7 9
となるので,
1 2 3 4 5 6 7 8 9
の下ヒンジは,1 2 3 4 5 の中央値を求めていることがわかる(上ヒンジは 5 6 7 8 9 の中央値)。
したがって,上の石田さんの記述
「下側ヒンジは中央値より下の値の中央値」は,正確に言えば「下側ヒンジは中央値以下の値の中央値」
「上側ヒンジは中央値より上の値の中央値」は,正確に言えば「上側ヒンジは中央値以上の値の中央値」
ということになる。
> set.seed(1234567)
> x <- rnorm(600)
> y <- x[-1]
> cat("length(x) =", length(x), " length(y) =", length(y), "\n")
length(x) = 600 length(y) = 599
> (fivenum(x)==quantile(x))[c(2,4)]
25% 75%
FALSE FALSE
> (fivenum(y)==quantile(y))[c(2,4)]
25% 75%
TRUE TRUE
> #
> x <- x[-1]
> y <- y[-1]
> cat("length(x) =", length(x), " length(y) =", length(y), "\n")
length(x) = 599 length(y) = 598
> (fivenum(x)==quantile(x))[c(2,4)]
25% 75%
TRUE TRUE
> (fivenum(y)==quantile(y))[c(2,4)]
25% 75%
FALSE FALSE
> #
> x <- x[-1]
> y <- y[-1]
> cat("length(x) =", length(x), " length(y) =", length(y), "\n")
length(x) = 598 length(y) = 597
> (fivenum(x)==quantile(x))[c(2,4)]
25% 75%
FALSE FALSE
> (fivenum(y)==quantile(y))[c(2,4)]
25% 75%
TRUE TRUE
> #
> x <- x[-1]
> y <- y[-1]
> cat("length(x) =", length(x), " length(y) =", length(y), "\n")
length(x) = 597 length(y) = 596
> (fivenum(x)==quantile(x))[c(2,4)]
25% 75%
TRUE TRUE
> (fivenum(y)==quantile(y))[c(2,4)]
25% 75%
FALSE FALSE