裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

ダメ出し:なんでこういう理解になるのか?

2012年10月18日 | 統計学

「医学・薬学・生命科学を学ぶ人のための 統計学入門 ―基礎の基礎からデータ解析の実際まで―」1.4 検定って?
http://d.hatena.ne.jp/foo22222/20121018

随所に不適切,誤った記述がある。だめだなあ。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ダメ出し:何が必要なのかを見極める

2012年10月18日 | ブログラミング

R で 25%、50%、75% 分位点ごとの点を plot する。」にて,
http://d.hatena.ne.jp/kingqwert/20121017/p1

> ちょっと意味がわかりにくいかもしれませんが。。。

プログラムが冗長なので,かえってわかりにくかった。

X<-runif(100000)
Y<-round(runif(100000,max=100)) # <-- sample 関数を使おう
Z<-cbind(X,Y)

l25<-aggregate(Z[,1],list(Z[,2]),function(x) quantile(x,probs = 0.25)) # <-- probs を指定しなければ,結果として求めたいものが 3 つはいっている。
l50<-aggregate(Z[,1],list(Z[,2]),function(x) quantile(x,probs = 0.5))  # quantile を 3 回も呼ぶ必要はない
l75<-aggregate(Z[,1],list(Z[,2]),function(x) quantile(x,probs = 0.75))

l<-merge(l25,l50,by="Group.1") # <- 別々に求めて,また一緒にするとは
l<-merge(l,l75,by="Group.1")   # Group.1 ごとに整理するという意味合いはあるけど,そうしなくてはならなくなったのが敗因

ではどうやるかといわれれば,

X <- runif(100000)
Y <- sample(0:100, 100000, replace=TRUE)    # 要するに X を 0~100 のグループに分類する
a <- split(X, Y)                            # Y の順序は関係しないので split で十分(本当は Y すら必要ないが)
ll <- sapply(a, quantile)                   # ll の 2 行目が 25%tile, 3 行目は 50 %tile,4 行目が 75 %tile
plot(0:100, ll[3,], type="n", ylim=c(0, 1)) # 内部を塗りつぶしたいというので面倒くさい
polygon(c(0:100, 100:0), c(ll[2,], rev(ll[4,])), col="aliceblue", border=NA)
for (i in 2:4) lines(0:100, ll[i,])         # これくらいなら for を使っても良いだろう

要するに,一様乱数を 101 組作って,それぞれの 25, 50, 75 %tile を描くということだから,101 組のラベル付けなど最初から不要(101 組である必要もない。100組でよいわけだし,各組の一様乱数の個数だって,乱数で決めなくてもよい)。

所要時間は,後者のプログラムの方が 7 倍ほど速い。

> ggplot2 を久しぶりに用いてきれいなグラフを書こうと努力しましたが、なかなか難しいですね。

ggplot2 を使う必要性がない。graphics パッケージで十分キレイな図が,しかも簡単に描けるのだから。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村