読者です 読者をやめる 読者になる 読者になる

笑いと統計学をつまみに日本酒と献血を楽しむ人が書くブログ

お笑いについて思った事を書きます,統計学・プログラミングについて勉強した事を書きます.美味しいお酒を見つけたらメモがてら書きます.献血ルームに行ったらメモがてら書きます.

【統計基礎講座 実践編】 カテゴリー名などの「数字じゃない変数」をRを使って数字に変換して回帰分析してみた

統計基礎講座

前回の記事では,定量的ではない定性的な変数に対してどのように統計上考えるか,というところをまとめました.

waraken.hatenablog.com

 

ポイントは0 or 1の数字に各定性的な変数を変換していくということでした.

今回は統計解析に特化したプログラミング言語 R を使って実際にその変換とやらをやってみましょう.

今回の目標を確認しよう!ダミー変数に変換

前回の記事と同様に,芸人さんの年収とそれぞれのデータが以下のようにあるとします.前回とほぼ一緒ですが,すこしだけ数字を変えています.

サンプルデータ

年収(万円)(被説明変数)年間テレビ出演本数(本)芸歴(年)ピン or グループ所属事務所
500 59 13 グループ 吉本興業
800 29 7 ピン 松竹芸能
930 67 9 グループ マセキ芸能社
830 79 10 ピン

ホリプロ

この変数たちを下記のように変換することが今回の目標です.

変換後

年収(被説明変数)年間テレビ出演本数芸歴ピン or グループ吉本松竹マセキ
500 59 13 1 1 0 0
800 29 7 0 0 1 0
930 67 9 1 0 0 1
830 79 10 0 0 0 0

 

今回は簡単のためにサンプルサイズ = 4 という非常に少ないデータを使いますが,実際に分析する場合は,こんな少ないデータではなく何百とか何千,何万とかのデータを扱います.もちろん1つ1つ手作業で変換するのは無理です!

ということで,Rを使って一気に変換しちゃいましょう!

ダミー変数に変換するサンプルコード

早速コードを紹介します.

Rで分析するにあたって,サンプルデータcsvファイルとして保存しましょう.
そのままコピーして,Excelファイルに貼りつけ,sample.csvとして保存してください.
f:id:chan_ume:20161008170538p:plain

コードの説明は,コメントアウトしながら説明しているのでまあ分かると思います.

# データ読み込み
x = read.csv("sample.csv")
# サンプルサイズを求めます
sample_size = nrow(x)

# ピンかグループか格納する行列を作る
form = matrix(nrow = sample_size, ncol = 1)
# 会社情報を格納する行列を作る
company = matrix(nrow = sample_size, ncol = 3)

# グループだったら1 ピンだったら0に変換
# 会社名もそれぞれ変換

for (i in 1:sample_size){
  if (x[i, 4] == "グループ") {
    form[i,1] = 1
  }
  else {
    form[i,1] = 0  
  }
  if (x[i,5] == "吉本興業") {
    company[i,1] = 1
  }
  else if (x[i,5] == "松竹芸能") {
    company[i,2] = 1
  }
  else if (x[i,5] == "マセキ芸能社") {
    company[i,3] = 1
  }
}

# company行列で1で埋まっていないところを0に変換
company[is.na(company)] = 0
# 分かりづらいのでヘッダーに名前つけよう
colnames(company) = c("吉本興業", "松竹芸能", "マセキ芸能社")
# その他の変数と合体
X = cbind(x[,1:3],form,company)
write.csv(X,"変換後.csv")

最後に 変換後.csvとしてcsvファイルを出力しています.
出力したファイルはこんな感じです.
f:id:chan_ume:20161008170558p:plain

はいー見事にダミー変数に変換することができました.

ダミー変数への変換は普通ライブラリで瞬殺するかも……

今回はプログラムを書いて,カテゴリーとかの質的変数をダミー変数に変えましたが,
Rは便利なのでそれを実行するライブラリがあります.

  • caret
  • ggplot2

この2つのライブラリを読み込んであげると上記の泥臭いコードを書かなくても一瞬でダミー変数にしてくれます.はい便利.

興味のある方は,調べてみてください.

まあ最初は泥臭く処理を書くということも,理解するうえで大事なのかなと思います.

せっかくなので重回帰分析もしてみる?

データ整備ができたら,そのあとは分析ですね!

今はサンプルサイズ = 4 で変数の数の方が多いという自由度0の状態です.
これでは分析できないので,適当にデータ数を増やしましょう.

僕は適当に数値を変えながらサンプルサイズ = 50 ぐらいのデータセットを作ってみました.

そしてそのあと,上記のコードを使って全てダミー変数に変換した,というところから話を進めます.

重回帰分析したい!というときは

summary(lm(X[,1]~X[,2:7]))

はい,これだけです.行列Xの1列目,つまり年収をそれ以外のデータで回帰分析しています.
Rで分析しようと思ったらこれだけで終わるんですね.非常に便利.

まとめ

前回に引き続き,今回は実践編としてコードを書いてみました.
前述したとおり,実際にはライブラリを使って瞬殺するのかもしれませんが,中ではこんな処理をしてるんだなーということが分かれば理解が深まるかと思います.

Web上にはRに関する情報がたくさんありますが,こんな感じの泥臭い処理に関する情報はあんまりないんですよね.
実際書いてみても面白くないし笑


誰かの役に立っていたら幸いです.