2011/11/19 07:04:30
デジタル画像処理 (Rで学ぶデータサイエンス 11)
購入しようかどうか悩み中
中を見てからかなぁ。
まず、次のBoxplotを見てどういう分布か予想できるだろうか?(zは簡単かもしれないがyは難しいと思う)

正解はこれ。xが一様分布、yが正規分布を二つあわせてbimodalにした分布、zが正規分布ですね。
x <- runif(200,min=-2,max=2) y <- c(rnorm(100,mean=-1,sd=0.5),rnorm(100,mean=1,sd=0.5)) z <- rnorm(200,mean=0,sd=1)
Boxplotが密度を表現してないのが問題なのだが、これはBeanplotで解決できる。密度の形がさやみたいで、中のスキャッタープロットが豆みたいなのでBeanplotと名付けたらしい。
元のBoxplotを左に、Beanplotを右に並べてみた。

library(beanplot) g <- rnorm(200,mean=0,sd=1) bm <- c(rnorm(100,mean=-1,sd=0.5),rnorm(100,mean=1,sd=0.5)) uni <- runif(200,min=-2,max=2) d = data.frame(uni=uni,bm=bm,gaus=g) par(mfrow = c(1,2)) boxplot(d, col = "lightblue") beanplot(d, col = "lightpink")
この例では対称なプロットになっているが、左と右で群を変えて非対称なプロットもできる。
欲しい!最近はR使ってないけど。
来週になったら所属が変わって「パソコンの電源を入れたり消したりするだけの簡単なオシゴトをするおじさん達」と一緒になるのだけど、まぁ、当然今やっている仕事はそのまま持っていくという話なので、給料据え置きでインフラまわりの仕事を上乗せされるだけなんだろうなぁ。チームごと移しているからそういう意図はビシビシと感じられるが、ここは空気を読まずに「給料上がんないってことはもちろんゼロサムですよね」という精神で明るくやっていこうと思う。
ちなみに今の上司は、(外資出身に総入れ替えしたという事情もあって)みなさん優秀で、僕も色々新しい事を学べて大変よかった。
献本ありがとうございます
内容はバイオインフォマティクスに限らずに割と広い内容をカバーした感じで、クックブックと逆引きの中間的なスタイルと言えば良いのだろうか?
Rのインストールから基本的な操作は(大体どの本にもあるように)載っていて
データマイニングとしては
がサンプルコードとともに簡潔に説明されている。
8章はバイオ系データの解析、チップとか。odesolveを利用したシミュレーションのサンプルもあって、SBMLRは面白そうだなぁと思った。メカニズムがどうなっているのかはモデルと実験系の不一致をよく突き詰めて考えることでしかきちんとした理解は得られないと思っている。
最後のほうの章は統合環境、データベースの連携、サーバー構築あたりの話。
あと、twitteRを使って生体組織名をつぶやくとその組織の図が返ってくるという例が載ってた。ちなみにRでもPitがあります。
富士山をプロットする関数をみかけたので、Rで描いてみた。
fx <- function(x){x^4-x^2+6} sfx <- function(x){12/(abs(x)+1)} gx <- function(x){1/2*cos(6*x)+7/2} plot(gx,-2,2,xlim=c(-7,7),ylim=c(0,7),xlab="",ylab="") par(new=T) plot(sfx,-7,-1,xlim=c(-7,7),ylim=c(0,7),axes=F,xlab="",ylab="") par(new=T) plot(sfx,1,7,xlim=c(-7,7),ylim=c(0,7),axes=F,xlab="",ylab="") par(new=T) plot(fx,-1,1,xlim=c(-7,7),ylim=c(0,7),axes=F,xlab="",ylab="")

ggplotで関数だけ描く方法わからんなぁとつぶやいたら、教えてもらったのでggplot2でも描いた。
gx <- function(x){ x[-2>x | x>2] <-NA 1/2*cos(6*x)+7/2 } fx <- function(x){ x[x<(-1)] <- NA x[x>1] <- NA x^4-x^2+6 } fx <- function(x){ x[-1<x & x<1] <-NA 12/(abs(x)+1) } ggplot(data.frame(x=c(-7,7),y=0), aes(x,y))+stat_function(fun=gx) \ +stat_function(fun=fx)+stat_function(fun=sx)

ggplot2だと線がうまくつながらなかった。
Ggplot2: Elegant Graphics for Data Analysis (Use R!)dose-responseカーブのあてはめをしたり、解析をしたりするためのdrcというパッケージを触ってみたのでメモ。
ryegrass(イネ科の牧草)におけるフェルラ酸の効果を調べたというデータを4パラメータのlog-logistic functionであてはめる。
ryegrass.m1<-drm(ryegrass, fct = LL.4())
plot(ryegrass.m1)

Rでのネットワーク分析用ライブラリの使い方が知りたい場合には良い本。snaとigraphの使い方がまとまっている。
第3章の「ネットワーク構造の諸指標」(密度、推移性、相互性)と第4章の「中心性」は役に立った。
いちおう、どういう場合にその手法が必要になるのかといったことをさらっと載せてからigraph,snaのサンプルコードを載せているが、本書はRの使い方がメインなので、特定の分野用のネットワーク分析の本もあわせて読んだほうがいいと思う。
igraphはRとPythonのbindingがあるのにチュートリアルがほとんどなさげなので、ネットワーク分析の本があると手っ取り早く知れて良い。
クリーク探索
こんなネットワークからクリークを探してみる

g <-matrix(c(0,1,1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,
0,1,0,1,1,1,1,0,1,1,0,1,0,0,0,1,1,1,0,0,0,1,
0,1,0,0,0),nrow=7,ncol=7,byrow=TRUE)
a <- graph.adjacency(g)
maximal.cliques(a)
[[1]]
[1] 0 1 2
[[2]]
[1] 1 6
[[3]]
[1] 0 2 4
[[4]]
[1] 2 3 4 5
[[5]]
[1] 3 6
Pythonの場合
a = [[0,1,1,0,1,0,0],
[1,0,1,0,0,0,1],
[1,1,0,1,1,1,0],
[0,0,1,0,1,1,1],
[1,0,1,1,0,1,0],
[0,0,1,1,1,0,0],
[0,1,0,1,0,0,0]]
g = GraphBase.Adjacency(a,mode=ADJ_UNDIRECTED)
g.maximal_cliques() # [(0, 1, 2), (1, 6), (0, 2, 4), (2, 3, 4, 5), (3, 6)]
g.largest_cliques() # [(2, 3, 4, 5)]