2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rのサンプルデータで遊ぶ②

Last updated at Posted at 2016-12-05

#つづいて
きぬいとです.日をまたいだので初投稿です.
前回の続きです.
前回は2変数間の相関を見ました.主な結論としては
①女性の生き残りが多い
②大人か子供かでの生き残りは強い相関があるとはいえない
③客室のクラスに大人が多いかどうかについても強い相関があるとはいえない
的なことをお話したんじゃないでしょうか.
注意したいのは,統計的に有意であることは相関が強いことを意味しないというところです.
②,③は検定では有意ですが,相関係数の値としては高くはないので注意してください.
他の相関については,前にも書いたとおり,皆さんで分析してくれていることでしょう.
前回「二項ロジットでもやるか」とか言った手前,本来の統計本なら飛ばさないことをぶっ飛ばして二項ロジットやります――.
二項ロジットをやる理由は単純に「えっ遊ぶんでしょ?生き残りは二値だし……」という理由です.もっと言えば第3変数を統制した相関とかで十分どうにかなる話です.しかし私は二項ロジットをやります.だって二項ロジットとかロジスティックって名前がかっこいいから.
……すみません調子に乗りました.

#二項ロジットって何?
ともあれ二項ロジット,つまり二項ロジスティック回帰分析は「回帰分析」の一つです.
「回帰分析」は,一つの変数を他の変数(変数群)で説明する分析です.
その中でも「線形回帰」「非線形回帰」とか,一般化線形モデルとか,色々あるんですが,そこら辺はいいです(ちなみに二項ロジスティックは一般化線形モデルです).
回帰分析には変数を2種類に分けます.説明変数と被説明変数です.
被説明変数は一つの分析につき一つです.今回は「生き残ったか否か」をそれにします.
説明変数は一つの分析にいくつでも投入できます.今回は残った変数全部ぶち込みます.
二項ロジスティック回帰は,2値の被説明変数を分析したいときに用います.具体的には「生き残りやすさは他の変数によってどれだけ上下するか」を見ます.
(対数オッズを取って云々みたいな話もあるんですがそれは別の機会にはなします)

#分析
ロジスティック回帰分析(これを含む一般化線形モデル全般)を行うには,Rにはデフォルトでglm()関数があります.便利です.
前回as.numeric()で数値型にしようねとか言いましたが,glm()関数はfactor型でも分析が可能です.

LogitModel.R
#glm()にはたくさんオプションを付けられますが
#今回はモデルの指定のみにします.
Result <- glm(X2$Survived ~ X2$Class+X2$Age+X2$Sex, family=binomial("logit"), X2)
#R上でもきれいな結果を出せるライブラリ
#噂によればTeXにそのままもっていけるらしい……?
install.packages("texreg")
library(texreg)
screenreg(Result)

#結果
============================
                Model 1     
----------------------------
(Intercept)         0.69 *  
                   (0.27)   
X2$Class2nd        -1.02 ***
                   (0.20)   
X2$Class3rd        -1.78 ***
                   (0.17)   
X2$ClassCrew       -0.86 ***
                   (0.16)   
X2$AgeAdult        -1.06 ***
                   (0.24)   
X2$SexFemale        2.42 ***
                   (0.14)   
----------------------------
AIC              2222.06    
BIC              2256.24    
Log Likelihood  -1105.03    
Deviance         2210.06    
Num. obs.        2201       
============================
*** p < 0.001, ** p < 0.01, * p < 0.05

なんだ"***"って!?という人もいると思うのですが,「その係数が統計的に有意か」を示す記号です.一番下に,どれだけの水準で有意かが示されています.
Interceptは5%,それ以外全部0.1%水準で有意ですね.

結果を見ると,Classの"1st",Ageの"Child",Sexの"Male"が出てきていません.
これらは「基準カテゴリ」(あるいは「参照カテゴリ」)として,それぞれ表示されているClass,Age,Sexの係数の比較基準になっています.
また,今回は使える変数全部ぶち込みました.これによって「他の変数を固定した場合のある変数の効果」を見ることができます.
例えば「性別や年齢を統制した上でも,1stクラスの人と比べて,2ndクラス/3rdクラスの人は生き残りにくかった」ということが推論できます.同様に,男女問わず子どもは生き残りにくかったようですし,クラスや大人子供問わず,女性は生き残りやすかったようです.
なお「どれだけ生き残りやすかった(生き残りにくかった)か」を見たい場合,この変数を見るだけだと不十分なので,それぞれの係数(共変量)を指数変換した

exp(Result$Coefficients)

を見てください.出てきた値だけ,生き残りやすくなってます.
その下にある「AIC」「BIC」その他はこの回帰式の適合度指標です.
一般にAIC,BICは数値が低いほうが適合度が高く,我々に都合がいいですが,今回は比較的大きめです.
扱える変数も少ないし,説明変数間の相関もおそらく低くはないだろうし(気になる人は「多重共線性」でググって見てください),今回は遊んでいるので細かくは触れません.

#相関と因果のお話
いろんなところで「相関は因果じゃない」って言ってますし,今回も因果っぽい推論をしていますが,これだけでは因果推論はできません.ただの関係性の記述です.
出典を覚えていないのですが,2つの変数間因果を推論するには少なくとも
①その変数間に相関があり
②一方の変数がもう一方の変数より"時間的"に先立っていることが明確である
ことが要請される……はずです.
(2017/12/07追記)この辺の話は統計学ではかなり大きな議論になっています.上記の因果条件は最も簡単な形を要請しますが,それを実現するためには色々考える必要があります.

#最後に――Rはいいぞ――
R言語はデフォルトでいろいろな分析を行うことができ,それらが1行で実行できてしまう扱いやすい言語です.
多くの場合日本語でエラーを返してくれますし,コピペして検索すれば誰かしら対処法を教えてくれます.
統計分析に限らず,数値計算やシミュレーションも可能です.
これだけできて基本的にタダなのは強いと思います.SPSSやSAS,Stataなど有料で優良な統計ソフトウェアは高くて手を出せない人に非常におすすめです.
あとPythonと組み合わせて,例えばPythonで取得してcsv形式に整形したデータをRで読み込んで分析して結果をPythonへ渡すみたいな事もできる(らしい)し,データサイエンスやるならPythonとRでしょ!というお気持ちです.
ただ,ウチのシマあるあるとして,欠損データが多い場合,処理がちょっと厄介だったり,R特有の演算にクセがあったりするので,知識が蓄積して使い慣れてくるとちょっと困るところもあるかもしれません.それでも十分優秀な言語です.Rはいいぞ.

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?