二群比較と回帰分析の関係


今回は二群比較と回帰分析の関係について考えたいと思います。
前回のブログでは、ANOVAと二群比較が共に「目的とする効果による変動が誤差による変動に対して有意に大きいか」という発想を根底に持つという意味で共通しているのだという議論を行いました。
実は、回帰分析と二群比較も同様の議論が可能です。
二群比較と単回帰分析は本質的に同じことをしているのです!
単回帰分析モデルの一般式は
y = βx + α + ε
と表されます。
これは、まさに目的の効果と誤差を分離して、説明変数を説明しようとしている式です。
これを前提にして、二群比較のそれぞれの群に0と1のダミー変数を与えて、回帰分析を行うと、通常のt検定をと同じp値が得られます。
以下では、Rを用いて検証を行いました。

> cityA <- c(178, 182, 181, 179, 178, 182, 181, 179, 173, 187, 170, 190)
> cityB <- c(168, 172, 174, 166, 169, 171, 165, 175, 162, 178, 164, 176)

> dat <- c(cityA, cityB)
> dat
 [1] 178 182 181 179 178 182 181 179 173 187 170 190 168 172 174 166 169 171 165
[20] 175 162 178 164 176

#ダミー変数を用いてcityAに0を、cityBに1を与える

> city <- c(rep(0,12), rep(1,12))
> city
 [1] 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1

#この段階で散布図を描写
> plot(dat~city)
#回帰分析
> summary(lm(dat~city))

Call:
lm(formula = dat ~ city)

Residuals:
   Min     1Q Median     3Q    Max 
 -10.0   -2.5    0.0    2.5   10.0 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   180.00       1.52 118.416  < 2e-16 ***
city          -10.00       2.15  -4.652 0.000123 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 5.266 on 22 degrees of freedom
Multiple R-squared: 0.4959, Adjusted R-squared: 0.473 
F-statistic: 21.64 on 1 and 22 DF,  p-value: 0.0001228 


#通常の2群間比較をt検定にて行う
> t.test(cityA, cityB, var.equal=F)

Welch Two Sample t-test

data:  cityA and cityB 
t = 4.6518, df = 21.96, p-value = 0.0001233
alternative hypothesis: true difference in means is not equal to 0 
95 percent confidence interval:
  5.541324 14.458676 
sample estimates:
mean of x mean of y 
      180       170 

#散布図の上に回帰直線を描写する
> plot(city, dat)
> abline(lm(dat~city))
大学の一般教養の講義や導入書では、anovaやtテスト、回帰分析を別個の物として扱うに留まっていることが多いように感じます。しかし、一般線形モデルを意識しながらこれらを眺めると、「目的の効果と誤差を分離する」という共通原理が浮き彫りになってきます。

Peter Dalgaard『Rによる医療統計学』2007 丸善株式会社  92 - 96pp

二群比較とANOVAの関係

今回は、平均値の二群比較が、対応の無い2群の一元配置分散分析を行うことに等しいことを直感的に理解することを目指します。


今、CityAとCityBに住んでいる住人をそれぞれの群から無作為に6人だけ選出して身長を測定したとします。それが以下のデータです。
このデータに対して対応の無い2群の一元配置分散分析を行います。


分散分析とは総変動を以下のように

総変動 = 目的要因変動 + 誤差変動
と分けることが発想の基盤となります。これにしたがって、以下の図のように目的要因変動(都市による変動)と誤差による変動を計算します。


総変動を分解した結果が以下のようになります。群間変動というのは目的要因変動(都市による変動)のことであり、群変動とは誤差による変動のことを指します。


これらから、各偏差平方を計算すると以下のようになります。
分散分析とは、目的となる要因効果(群間変動)の分散が、誤差効果(標本間変動をのぞいた群内変動)の分散に比べて有意に大きいかを検定する統計手法です。これを行うにはこれら二つの比を取れば良いのです。そしてこの比は等分散の検定の時に用いた、F値です。自由度はそれぞれの自由度とします。

今回のケースで実際に計算してみると、

F = 300 / 6 = 50

となります。
自由度v1 = 1, v2 = 10の下、上側確率が5%になるF値は、,F分布表を参照すると4.96となります。
そのため、「今回のケースは都市による変動が誤差による変動を危険率5%で有意に上回る」と言うことができます。

一方、今回のケースにStuden t検定を行うとどうなるでしょうか。個々から下はRを用いて計算を行います。

$ R
> cityA <- c(178, 182, 181, 179, 178, 182)
> cityB <- c(168, 172, 174, 166, 169, 171)
> t.test(cityA, cityB, var.equal=T)

Two Sample t-test

data:  cityA and cityB 
t = 7.0711, df = 10, p-value = 3.411e-05
alternative hypothesis: true difference in means is not equal to 0 
95 percent confidence interval:
  6.848936 13.151064 
sample estimates:
mean of x mean of y 
      180       170 

p< 0.05なので、二群の平均値の間には有意な差があると言うことができます。
ところで、t値は7.0711と求まりました。
実はこのt値を2乗してみると面白い結果を得ることができます。

> 7.0711 * 7.0711
[1] 50.00046

なんと驚いたことに、先ほど計算したF値とStudent t testで計算したt値の二乗が一致するではありませんか。これはただの偶然ではないのです。
一般に、平均値の二群比較でもとめられるt値の二乗は、対応の無い2群の一元配置分散分析を行うF値に等しいのです。

このことから、tテストを行うということはANOVAを特定下で行うことに等しいということができます。

この話題は、結局平均値の二群比較とANOVAと回帰分析を巻き込んで、一般化線形モデルというトッピックに発展するようです。

まだ勉強の途中でよく理解できていないので、あまり細かいことは良く理解できていません。しかし、現状理解できているのは、「見たい要因による効果」と「偶然による誤差」を一次結合の形式で分離することができるというモデル(信念)を頭において、これらの理論は構築されているということです。
非線形であった場合、例えば誤差がある値を超えてきた場合に、見たい要因の変動にもとても大きな(小さな)な影響を与えるようなことが起きると思われます(一例ですが)。非線形の場合は、さまざまな要因間が絡み合っていると考えるはずです。要するに、「世の中、物事の足し算でできているような単純なものではない」とすることではないでしょうか。

少し、哲学的になってきてしまいましたが、現状私が理解できている(しているつもり)の範囲を書きました。

【参考文献】

栗原 伸一『入門統計学』Ohmsha, 2011, 88-89, 130-138pp














霊長類の進化

先週、愛知県犬山市にある日本モンキーセンター(http://www.j-monkey.jp/)を見学してきました。様々な種類の霊長目の動物達が活発に動き回る姿を目の当たりにして、私たちヒトという動物の生きる意味について問い直すきっかけとなりました。

さて、今回は霊長目(霊長類)の進化の歴史について勉強したことをまとめます。

例調理は、中生代の白亜紀末期、今からおよそ7000万年前にほかのグループから分かれたと考えられています。
霊長類の独自の特徴は以下のようなものが挙げられます。

  • 樹上への適応を通じた独自の進化
  • 平爪を有する
  • 発達した鎖骨
  • 母指対立により物を握ることが可能
  • 両眼で前方の同じものを見ることが可能
  • 赤色オプシン遺伝子を重複させて変異を加えることで、緑色オプシンを復活させている
原始的な真アルコンタ類からヒトに至るまでの進化の過程で重要な分岐は以下の通りです。
  • 約7000万年前(白亜紀終わり頃)
    • 霊長目がツパイやヒヨケザルの仲間から分岐
  • 約3000万年前(新生代)
    • 類人猿が旧世界ザルと分岐
  • 約700万年前
    • ヒトとチンパンジーが分かれた
  • 約300万年前
    • チンパンジーとボノボが分岐



日本モンキーセンターのゴリラやチンパンジーの檻のそばにはヒト様の檻も用意されていて、中にはベンチが置いてあり記念撮影ができるようになてちます。その檻に張られたヒトの紹介文の内容は、ヒトの可能性や危険性に言及したもので大変示唆に富んでいました。よって、ここではこれを引用させて頂きます。

ヒト
英名 : Human
学名 : Homo sapiens
分布 : 地球上の陸地のほぼ全域

身体
  • しっぽがなく、からだの毛は少ない。
  • 器用な前足と大きな脳を持つ。
  • 二本足でまっすぐ立って歩き、サルの仲間のくせに木登りがへた。
食性
  • なんでもよく食べる雑食性だが、1頭ごとの好き嫌いは多い。
  • 食べ物をいろいろ加工したり、貯めこんだりする。
習性
  • 好奇心が強く、遊び好き。危険な眼にあっても、なかなかこりない。
  • 大きく複雑な群れを作って生活し、音声によるコミュニケーションがさかんである。
  • 「文字」や「絵」などを通じて情報をやりとりし、いつも仲間とふれ合うことをもとめている。
  • しばしば、いさかいをおこあし、仲間同士で殺し合いをすることも珍しくない。
  • 本能だけではうまく生きられず大人になるまでに身につけなくてはならないことがとげも多い。
  • 優れた知能をもち、大きな可能性をひめているるが、失敗したときにまわりに与える影響も大きい。それを忘れたとき地球上でもっとも危険な動物となる。

【参考文献】
井出利憲「分子生物学講義中継 生物の多様性と進化の驚異」羊土社 2010 310-311pp
財団法人日本モンキーセンター「霊長類 ガイドブック」 2012 64pp


Rを用いた単回帰分析の基本

ある試薬を培養細胞に添加したときのある遺伝子の発現量を制御するための実験を行った。実験結果は以下の通りである。このデータを用いて単回帰分析を行う。


以下解析。

#Rを起動
$ R

#データの入力
x <- c(0.1, 0.2,0.3,0.4,0.5,0.6)
y<-c(3.1,3.8,5.7,6.7,7.5,9.3)
dat <- data.frame(x, y)

#データの確認
dat

    x   y
1 0.1 3.1
2 0.2 3.8
3 0.3 5.7
4 0.4 6.7
5 0.5 7.5
6 0.6 9.3

#データの描写
png("dat1.png"); plot(dat, xlab="reagent dose(ug)", ylab="gene expresion"); dev.off();
#回帰分析
model <- lm(y~x, data=dat)

#回帰分析結果の要約表示
summary(model)

Call:
lm(formula = y ~ x, data = dat)

Residuals:  #各残差
            1             2             3            4              5             6 
 0.16190 -0.36952  0.29905  0.06762 -0.36381  0.20476 

Coefficients:
                 Estimate     Std. Error    t value    Pr(>|t|)            #推定値
(Intercept)   1.7067        0.3056      5.585     0.00504 **     #定数項(β0)
x                12.3143       0.7847    15.693     9.63e-05 ***  #回帰係数(β1)
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 0.3283 on 4 degrees of freedom  #残差の標準誤差
Multiple R-squared: 0.984, Adjusted R-squared:  0.98 #寄与率、調整済寄与率
F-statistic: 246.3 on 1 and 4 DF,  p-value: 9.632e-05        #F0値、p値

#回帰係数の95%信頼区間を算出

confint(model, level=0.95)

                          2.5 %      97.5 %
(Intercept)  0.8581746    2.555159    #β0の95%信頼区間の下限と上限
x              10.1355593   14.493012   #β1の95%信頼区間の下限と上限

#実験データの散布図と回帰直線の描写

png("dat2.png");
plot(dat, xlab="reagent dose(ug)", ylab="gene expresion"); 
abline(model, col="red")
dev.off();
【参考文献】
辻谷 将明、 和田 武夫『Rで学ぶ確率・統計』共立出版 2012 122 -136 pp.



生物界の分類をFreemindで整理してみた!





【参考文献】

井出利憲「分子生物学講義中継 生物の多様性と進化の驚異」羊土社 2010 32pp

GNU/Linuxをソースコードからビルドする手順

私たちが普段、Linuxと読んでいるものの実態は実は、Linux kernel + GNU softwareの複合環境なのです。図で示しますと下のようになります。

したがって、GNUの人々はこのような環境のことをGNU/Linuxと呼ぶように主張しています。確かに一理あると思います。

ところで、GNU/Linuxの環境をソースコードよりビルドする時は、段階が多くとても混乱してしまいます。
そこで、今回は各段階の説明をしてみたいと思います。



#1.ファイルシステムの作成とデバイスファイルの作成
  • Filesystem Hierarchy Standard(FHS)に基づいたファイルシステムを構築する。
  • MAKEDEVというスクリプトを用いて/dev内にデバイスファイルを生成する。
#2.各ソフトウェのコンパイルと導入
  • 基本は./configure, make, make installを繰り返すだけだが、./configureの時にオプションを大量に指定したり、make installの時に、インストール先のディレクトリを指定する必要がある。
  • まずは、glibcをコンパイル。glibcは各種コマンドやソフトウェアを実行する際に必ず必要。GNU/Linux環境はほとんどのコマンドやソフトウェアでダイナミック・リンクにてglibcを利用するため、このライブラリがないと各種コマンドが実行できない。
  • ncurses : コンソール端末の表現力を向上させるライブラリ。bashの動作に必須。
  • bash : Linuxの標準シェル
  • util-linux : ログイン関連やttyコマンド、ディスク操作
  • coreutils : シェルの中でよく使うコマンド群を集めたソフトウェアパッケージ。cat, ls, suといったシェル関連コマンドを含む。
  • etc.
#3.カーネルのコンパイル
  • 設定項目が膨大なのので、開発環境の構成ファイルを流用すると良い。
  • makeは場合によって一晩かかる時がある。
  • -jのオプションで時間の短縮が可能。
#4.initramfs(initrd)ファイルの作成
  • initramfsとは、カーネルをロードした後で、一時的にメモリー上に展開したルートファイルシステムを、マウントできるように準備するためのファイルである。
  • 少し前までinitrdという名称で呼ばれていたが、現在はinitramfsに変更されている。
#5.ルートファイルシステムの完成
  • ブート時に起動するプログラムやユーザ名、サービス名、パスワードといった最低限必要となるファイルを作成する。
  • ex)inittab, rc.sysinit, rc*, passwd, group, profile, rsyslog.conf, services, fstab, hosts
#6.記憶媒体に書き込む
  • fdiskによりパーティションを作成
  • mke2fsなどでパーティションをフォーマット
  • ビルドしたGNU/Linuxシステムをシュリンクしてから、アーカイブ、記憶媒体にコピー。
  • ブートローダー(LILO, GRUB)を導入
  • grub.confの設定
#7.各種アプリケーションを導入する
  • 必要に応じて、vimなどのテキスト編集コマンドや、Apacheなどのサーバー関連アプリケーションを追加導入する。
【参考文献】
『日経Linux 2011年11月号』日経BP社

『日経Linux 自分で作るLinux OS 2006』日経BP社
『Software Design 総集編 2001 - 2012』技術評論社







Linuxの起動プロセス

Linuxの起動プロセスの知識は、トラブルが生じた時やkernelやその他環境をソースコードからコンパイルして組み合わせていく時に、重要となります。































【参考文献】
http://jibun.atmarkit.co.jp/lskill01/rensai/lpicdrill06/lpicdrill01.html

Linuxにおけるプロセスの階層性


LinuxシステムではinitのいうPID 1のプロセスの子プロセスという形ですべてのプログラムが生成されます(forkの繰り返し)。
pstreeというコマンドを使用するとプロセスツリーをきれいに表示することができます。

$ pstree


ご覧の通り、initは最上流のプロセスということがわかります。
今回実行したpstreeというプロセスはinit-sshd-sshd-sshd-bash-pstreeのような親子関係を経てやっと実行されているのです。
ちなみにLinuxのkillコマンドはPID 1を特別なものと見なしており、killすることはできません。
#kill関数の仕様を確認
$ man 2 kill





Macにおけるプロセスの階層性

Linuxのプロセスはinitを1番の親プロセスとして子プロセスが再帰的に生成される形態を取っています。
Mac OS Xも同様のシステムを採用しています。
まずは、Macのプロセスの階層性を確認してみます。

#pstreeのインストール

$  wget ftp://ftp.thp.uni-duisburg.de/pub/source/pstree-2.27.tar.gz
$ tar xzvf pstree-2.27.tar.gz
$ gcc -o pstree pstree.c

#pstreeの実行
$ ./pstree


このツリーを眺めてみると、
rootユーザーが実行した/sbin/launchdというプロセスがすべての元のプロセス(PID : 1)ということができます。

そこで、このプロセスを停止(kill)してみるとどのような挙動が予測されるでしょうか。
UNIX系のOSにおいては親プロセスが停止されると子プロセスも強制終了されます。したがって、launchdを停止すると、システムが強制終了されることが予想されます。
実際に行ってみます

#( - 9)は強制終了のためのオプション
$ sudo kill -9 1

見事にシステムはシャットダウンされました。