c1 r c2 AIC
78 2 5 7 487.5261
60 2 5 2 488.7143
105 3 5 1 490.2904
72 2 6 5 490.6599
130 3 4 8 491.1111
59 2 3 2 491.6356
123 3 5 6 492.0030
116 3 4 4 492.4315
55 2 4 1 492.9979
129 3 2 8 493.2800
No.21923 Re: AIC による,ヒストグラム(度数分布表)の最適階級分割の探索 【青木繁伸】 2016/03/07(Mon) 09:31
(1) 結果として,4階級になるという理解
その通り
(2) c1 r c2 の読み方が,分かりません。
プログラム中の注釈を参照
for (c1 in 1:(c-2)) { # 左端で併合する階級数を探索
for (c2 in 1:(c-2)) { # 右端で併合する階級数を探索
:
for (r in 1:(c-c1-c2)) { # 中央付近で併合する階級数を探索
(3) ヒストグラム(19本のビンを,4階級に併合)の区間を知りたい
df 要素ではなく,breaks 要素を見ます。ans$breaks
(4) 数量データの離散化の一つの手法
その通り
No.21924 【御礼】 Re: AIC による,ヒストグラム(度数分布表)の最適階級分割の探索 【明石】 2016/03/07(Mon) 09:37
青木先生 様,
お忙しいところを失礼いたします,明石と申します。
ご教示いただき,大変に助かりました。
今まで,EMアルゴリズム(混合分布)を用いて,離散化していましたが,
うまくいかないことが多く,苦慮していました。
心から,心より,御礼を申し上げます。
No.21928 Re: AIC による,ヒストグラム(度数分布表)の最適階級分割の探索 【明石】 2016/03/07(Mon) 21:50
青木先生 様;
お忙しいところを失礼いたします,明石と申します。
お世話になります。
追加の質問がございます。
ご教示を何卒どうぞ,よろしくお願いいたします。
(4)
ans$n
> [1] 16 22 11 6 7 9 11 4 3 2 3 2 1 1 0 0 0 0 2
ビン(19本)の高さ,と理解しました。
(5)
ans$breaks
> [1] 0.015000 5.369737 10.724474 16.079211 21.433947 26.788684 32.143421 37.498158 42.852895
[10] 48.207632 53.562368 58.917105 64.271842 69.626579 74.981316 80.336053 85.690789 91.045526
[19] 96.400263 101.755000
ビン(19本)の区間の左端,右端の値,と理解しました。
(6)
.frame': 416 obs.
⇒ 収束計算の繰り返し回数と理解しました。
(7)
併合した結果の4階級の「4」という値を取得するには,どうすればよいのでしょうか?
(8)
4階級を,左から,1,2,3,4 と番号付けしたといたします。
ベクトルxの要素(要素数は100)が,どの階級(1〜4)に属するのかを出力する
Rプログラムを考えていますが,作成できません。
誠に申し訳ございませんが,Rコードを例示していただけると助かります。
何卒どうぞ,ご教示をよろしくお願いいたします。
No.21929 Re: AIC による,ヒストグラム(度数分布表)の最適階級分割の探索 【青木繁伸】 2016/03/07(Mon) 22:52
併合後のヒストグラム(の長方形)を描くのは,以下の部分で,その長方形の X 座標は,lo+cmg[i]*delta,lo+cmg[i+1]*delta
なので,sapply(1:(m+2), function(i) rect(lo+cmg[i]*delta, 0, # 併合後のヒストグラムそれを,cat でコンソールに書き出すとすれば<
lo+cmg[i+1]*delta, mean(p[(cmg[i]+1):(cmg[i+1])]),
border="red", col="red", density=15))
sapply(1:(m+2), function(i) { rect(lo+cmg[i]*delta, 0, # 併合後のヒストグラム
lo+cmg[i+1]*delta, mean(p[(cmg[i]+1):(cmg[i+1])]),
border="red", col="red", density=15)
cat(lo+cmg[i]*delta, lo+cmg[i+1]*delta, "\n") # これを追加しますね。カテゴリー数は m+2 かな?
})
> ans <- AIC.Histogram(x, 0.01)
0.015 10.72447
10.72447 37.49816
37.49816 64.27184
64.27184 101.755
No.21930 【Special Thanks !】 Re: AIC による,ヒストグラム(度数分布表)の最適階級分割の探索 【明石】 2016/03/08(Tue) 05:11
青木先生 様,
お忙しいところを失礼いたします,明石と申します。
ご教示いただき,大変に助かりました。
ご教示いただきました内容を基にして,自分の頭でトレースをいたします。
心から,心より,御礼を申し上げます。
No.21934 Re: AIC による,ヒストグラム(度数分布表)の最適階級分割の探索 【明石】 2016/03/11(Fri) 16:29
青木先生 様,
お忙しいところを失礼いたします,明石と申します。
お世話になります。
ご教示いただきました内容を追試して,理解をしました。
最適階級の区間(左端の値,右端の値)を,コンソールに出力できるようになりましたが,
関数の戻り値に,加えたいと思い,
先生からご教示いただきましたコードに下記のように加筆しましたが,
うまくいきません。
ご教示をいただければ,助かります。
どうぞ,よろしくお願いいたします。k <- m+2 # 最適階級数以上,よろしくお願いいたします。
mx <- matrix(0, nrow=k, ncol=2)
sapply(1:(m+2), function(i) { rect(lo+cmg[i]*delta, 0, # 併合後のヒストグラム lo+cmg[i+1]*delta, mean(p[(cmg[i]+1):(cmg[i+1])]), border="red", col="red", density=15) r1 <- lo+cmg[i]*delta r2 <- lo+cmg[i+1]*delta cat(r1, r2, "\n") mx[i,1] <- r1 mx[i,2] <- r2 }) invisible(list(df=df, n=n, breaks=brks, k=k, mx=mx)) # 結果を返す
No.21935 Re: AIC による,ヒストグラム(度数分布表)の最適階級分割の探索 【青木繁伸】 2016/03/11(Fri) 16:58
一番少ない修正量で動かすにはmx[i,1] <<- r1しかし,<<- はなるべく使わないほうがよい
mx[i,2] <<- r2
正統的には# k = m+2 # 使わない
# mx <- matrix(0, nrow=k, ncol=2) # 使わない
cmg <- cumsum(c(0, c1, rep(r, m), c2))
mx <- sapply(1:(m+2), function(i) { rect(lo+cmg[i]*delta, 0, # 結果を mx に代入
lo+cmg[i+1]*delta, mean(p[(cmg[i]+1):(cmg[i+1])]),
border="red", col="red", density=15)
r1 <- lo+cmg[i]*delta
r2 <- lo+cmg[i+1]*delta
cat(i, r1, r2, "\n")
return(c(r1, r2)) # sapply から返される値
})
mtext(paste("AIC =", round(AIC, 2)), side=3, line=-1.2,
at=lo+0.8*c*delta)
invisible(list(df=df, n=n, breaks=brks, k=ncol(mx), mx=t(mx)))
No.21936 【御礼】 Re: AIC による,ヒストグラム(度数分布表)の最適階級分割の探索 【明石】 2016/03/11(Fri) 20:40
青木先生 様,
お忙しいところを失礼いたします,明石と申します。
今回も,大変に良い勉強をさせていただき,誠にありがとうございました。
ご教示いただきました内容を基にして,自分の頭でトレースをいたします。
心から,心より,御礼を申し上げます。
● 「統計学関連なんでもあり」の過去ログ--- 048 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る