医療職からデータサイエンティストへ

統計学、機械学習に関する記事をまとめています。

Rでカーネル密度推定

ヒストグラムから確率密度分布を知りたいと思い、調べているとカーネル密度推定なるものがあるようです。色々調べてみたのですが....よく分からん。

Rで実行しながら、学んでいきます。

今回のお題

今回は正規分布から発生させた50個の乱数を使って、正規分布の確率密度を推定したいと思います。

rand <- round(rnorm(50,0,1),1)

hist(rand,freq = F,main="",xlab = "",xlim = c(-3,3))
points(rand,rep(0,50),pch = "l")
curve(dnorm(x,0,1),add = T,col = "red")
legend(x = "topright",lty = 1 , 
       col = "red",legend = "True Density",cex = 0.8)

f:id:h-wadsworth02:20181230211832p:plain

カーネル密度推定法

早速始めてみましょう!実はRにはdensity関数というカーネル密度推定をする関数が用意されています。これを使うと

> estimated <- density(rand)
> hist(rand,freq = F,main="",xlab = "",xlim = c(-3,3))
> lines(estimated,col = "blue")
> curve(dnorm(x,0,1),add = T,col = "red")
> legend(x = "topright",lty = 1 , 
+        col = c("red","blue"),
+        legend = c("True Density","Estimated Density"),cex = 0.8)
> head(data.frame(x = estimated$x,
+            y = estimated$y))
          x            y
1 -3.059651 0.0002600824
2 -3.047480 0.0002887392
3 -3.035309 0.0003195641
4 -3.023138 0.0003533890
5 -3.010968 0.0003910966
6 -2.998797 0.0004315577

はい、できました!個数が50個と少ないので少しいびつですが、推定された値にもしっかりアクセスできてます!

f:id:h-wadsworth02:20181230211904p:plain

もう少し詳しくまとめてみたかったのですが、私の理解が追いつかず今回はここまでで断念します。m(__)m

また理解が進んだらまとめてみたいと思います。

medi-data.hatenablog.com

参考

パターン認識と機械学習 上

パターン認識と機械学習 上

  • 作者: C.M.ビショップ,元田浩,栗田多喜夫,樋口知之,松本裕治,村田昇
  • 出版社/メーカー: 丸善出版
  • 発売日: 2012/04/05
  • メディア: 単行本(ソフトカバー)
  • 購入: 6人 クリック: 33回
  • この商品を含むブログ (20件) を見る