バイオインフォをやっている大学院生です。プログラミングのことなどを書きます。

Rで標本分散、標準偏差、CVを計算する

Rでvarやsdで計算されるのは標本分散、標本標準偏差ではなくそれぞれ不偏分散と不偏標準偏差になります。 nをサンプル数、\overline{x}を平均値とします。

標本分散

f:id:feb_march:20200123155543p:plain

標本標準偏差

f:id:feb_march:20200123155555p:plain

不偏分散

f:id:feb_march:20200123155603p:plain

不偏標準偏差

f:id:feb_march:20200123155615p:plain

標本分散と標準偏差、ついでにCV(coefficient of variation, 標準偏差/平均)を求める関数は下のようになります。

# 標本分散
sample_var <- function(x,...){
    return(var(x,...) * (length(x)-1) / length(x))
}

# 標本標準偏差
sample_sd <-function(x,...){
    return(sd(x,...) * sqrt((length(x)-1)/length(x)))
}

# 変動係数
cv <- function(x,...){
    return(sample_sd(x,...)/mean(x))
}

参考
http://cse.naro.affrc.go.jp/takezawa/r-tips/r/59.html

Rのplotの色指定方法まとめ(量的データの場合)

量的データのプロットに関して、色を付ける方法を紹介する。また、凡例をどうつければいいか一例を示す。なお、データがカテゴリカルデータの場合はこちらの記事をみてほしい。 f:id:feb_march:20191027215511p:plain

グレースケールで表示する方法

gray
グレースケール
gray(level)(levelは0から1の間)で指定できる。0で黒、1で白になる。

RGBで指定する方法

赤、緑、青の値で色を表現する。Rではrgb(red,green,blue)で指定する。デフォルトだとそれぞれの色は0から1の間にする必要がある。rgb(red,green,blue,maxColorValue=255)とするとそれぞれの色の範囲を0から255として指定できる。

red, green, blueのパラメータのうちの一つを変化させた。他の二つのパラメータは0
red, green, blueのパラメータのうちの一つを変化させた。他の二つのパラメータは1

HSVで指定する方法

hsv
HSVによる色の指定
HSVはhue(色相)、saturation(彩度)、value(明度)によって色を表現する。RGBの場合と同じように、hsv(hue, saturation,value)によって指定できる。上の図は、3つのパラメータのうち一つだけを0から1へ変化させた場合の色の変化を示したもの。なお、変化させない2つのパラメータは共に1である。

colorRampを使う方法

colorRamp
colorRampによる色指定の例
colorRampでは、複数の色を指定して、それらの色のグラデーションを用いて表すことができる。図は上から順に、

pal = colorRamp(c("blue", "red"), space="rgb")
pal = colorRamp(c("blue","white","red"),space="rgb")
pal = colorRamp(c("blue","green","yellow","orange","red"),space="rgb")

として色を指定した。このとき、palは0から1の数値を引数に取りその値に対応するRBG値を返す関数である。

凡例の付け方

一番上の散布図の凡例はSDMtoolsというライブラリのlegend.gradientという関数を用いて書いた。

pnts = cbind(x =c(2.5,3,3,2.5), y =c(3,3,2,2))
legend.gradient(pnts,
    cols=apply(colorRamp(c("blue","yellow","red"),space="rgb")(0:100/100)/256,1,function(x){rgb(x[[1]],x[[2]],x[[3]])}),
    limits=c(0,1),
    title=""
)

pntsは凡例の位置、colsは描画するのに使う色(2色以上で今は101色)、limitsは値の範囲、titleは凡例の題名。

使ったコード

https://github.com/kubotam-m/R_codes/blob/master/color_test.R

Rのplotの色指定方法まとめ(カテゴリーデータの場合)

Rで下のようなプロットをするときに、使える色の指定方法をまとめる。今回はデータがカテゴリーデータの場合に使える方法を5個紹介する。 なお、量的なデータの場合の色指定の方法はこちら。

bioid.hatenablog.jp

f:id:feb_march:20191019214918p:plain

col=(整数)で指定する方法

整数で指定できる色一覧
plot(x,y,col=1)などとすることで色の指定ができる。指定できる色は上の8色。

メリット・デメリット

楽。ただし色数が限られるので、多数のカテゴリーがある場合は対応できない。

Rで指定されている色名によって指定する方法

R defined color
Rで定義された色一覧
blue, red, greenなど単語で色を指定できるようになっている。plot(x, y, col="red")などとして使う。指定できる色の一覧を示したのが上の図だ。それぞれの番号の色がどんな名前で定義されているか下のリンクから参照できる。 https://github.com/kubotam-m/R_codes/blob/master/color_list.txt

メリット・デメリット

一番直感的でわかりやすいのはこの方法だと思う。しかし、多数のカテゴリーがあると、適切に指定しないとカテゴリーが見分け辛くなるし、指定するのもめんどくさい。

RColorBrewerを使う方法

colorBrewer palettes
RColorBrewerで使えるパレット一覧
RColorBrewerというパッケージを使用することで既存のパレットから色を選択して使うことができる。使い方はbrewer.pal(5, "Blues")のようにbrewer.pal(<色数>, <パレットの名前>)で色を取得できる。このとき"#FFFFFF"のように文字列で返ってくるので扱いが楽。

メリット・デメリット

すでに作られたパレットから選択して使えるので、色を選びやすいのがメリット。デメリットは、色数が一番多いパレットでも12色しかないことだ。

colorRampを使う方法

colorRamp categorical
colorRampでカテゴリー変数の色を指定する例
colorRampを使うと、自分で好きな色を指定してパレットを作成し、その中から好きな数だけ色を作成することができる。上の棒グラフは次のようなコードで書いたもの。

pal <- colorRampPalette(c("blue","green","yellow","orange","red"),space="rgb")
col_l <- pal(25)
barplot(1:25, names=1:25,col=col_l)

最初と最後の色だけではなく、中間の色も指定することができる。

メリット・デメリット

自分で色を指定してパレットを作ることができるのがメリット。色指定が手間といえば手間と言えるが、色覚特性に配慮した色にしたい場合などではかなり使いやすいと思う。また、色数を多くできる。

colorRampsを使う方法

colorRamps
colorRampsで定義されているパレットと色の例
colorRampsでは、colorBrewerと同じようにパレットが定義されている。定義されたパレットを選択して、そこから自分で色数を指定することができる。上の図は、それぞれのパレットから、色数を10として色を作ったときにできる色を示したものである。

メリット・デメリット

パレットがすでに定義されていて、さらに色数を自分で指定できるというメリットがある。また、"#FFFFFF"などのような文字列で返されるので扱いやすい。デメリットは特に思いつかないが、色数を多くしたときにパレットによっては色の区別が付き辛くなるかもしれない。

使い分けについて

一番直感的でわかりやすいのは色名で指定する方法だろう。しかし、色数が多いときに指定するのが面倒だ。色の数が比較的少ない(10程度)ならRColorBrewerを使うのが一番楽なのではないかと思う。色数がそれ以上になると、RColorBrewerでは対応できないので、colorRamp、もしくはcolorRampsを使うのが良いと思われる。自分で色を指定してパレットを作りたいならcolorRamp、既存のパレットでいいならcolorRampsが扱いやすいだろう。

参考リンクおよび使用したコード

統計グラフの色

R Color Reference Sheet | Brokering Closure

使用したコード

https://github.com/kubotam-m/R_codes/blob/master/color_test.R