jnobuyukiのブログ

JavaScriptとR言語を中心に研究活動に役立つwebアプリケーション技術について考えていきます。twitter ID: @j_nobuyuki

R言語での変数の型確認の重要性(2)

前回、R言語では変数の型を明示的にしていしないので、注意が必要だという投稿をしました。
今回は、型変換に気をつけたほうが良い例として回帰分析をとりあげます。

回帰分析

回帰分析は、ある変数を別の変数で予測に用います。予測に使用する変数の値に適当な重み付けをして、なるべく予測される値に近づけようとするイメージです。予測モデルは、典型的に次のような方程式で表されます。

予測される変数 = 切片 + 係数 * 予測する変数 + 誤差

回帰分析の詳細は、また別の機会にとりあげます。

予測される変数と予測される変数の性質

一般的な回帰分析であれば、予測する変数、予測される変数ともに連続的な量的データを用います。R言語の型で言えば、numeric です*1。しかし、回帰分析はカテゴリーデータを数値に変換して*2、解析に加えられます。そしてR言語のlm関数は、カテゴリーデータの数値変換を**勝手に**やってくれます。「勝手に」カテゴリー変数を前提とした解析を行うので、エラーが出ません。出力を注意深く見ることでこれがわかります。では仮想的なデータを使って、実際にみてみましょう。

まずは、データを用意します。

DV <- rnorm(100)
IV <- sample(1:100,100, replace = TRUE)

上のコードを実行するとDVという変数には平均0、標準偏差1の正規分布からランダムに生成された100の数値が保存されます。また、IDには1から100までの整数がランダムに100保存されます。どちらも数量データです。これらのデータを利用して回帰分析を行うには以下のコードを実行します。

res_lm <- lm(DV~IV)
summary(res_lm)

ここでIVが何らかの理由で、カテゴリーデータになってしまった状況を想定します。変換したデータをIVcとして回帰分析をしてみます。

res_lmc <- lm(DV ~ IVc)
summary(res_lmc)

では二つの回帰分析の出力結果を比べてみましょう。最初にどちらも数量データの回帰分析の出力結果は以下のようになります。
f:id:jnobuyuki:20170127151728p:plain
図のなかで(intercept)の横に書いてある数字が切片の推定値です。その下のIVの横にあるのがIVについての係数の推定値です。ここでは切片や係数の有意性については特に問題にしません。

では、次にカテゴリーデータとして扱われているIVcを使った回帰分析の結果を見てみましょう。
f:id:jnobuyuki:20170127151752p:plain
一見してわかるように、たくさんの推定値が並んでいます。実は表示されている画像は全体の半分くらいです。このようになってしまうのは、IVがカテゴリーデータとして扱われているためです。どういうことかというと、カテゴリデータが独立変数にある場合は、ある基準となる水準からのその他のそれぞれのデータポイントまでの際が、別のものとして推定されるのです。それで、たくさんの係数の推定値が表示されています。

上記を見てわかるように、ちょっとしたコーディング方法の違いでも、出力結果の意味するところは違います。上記のような出力はかなり目立つので、気づいたらすぐに、独立変数の型をstr関数やclass関数で調べてみましょう。

*1:回帰分析には様々なバリエーションがあります。例えば、予測される変数が「はい・いいえ」のような2値データの場合はロジスティック回帰になります。また、予測される変数は量的データ、予測する変数が全てカテゴリーデータの場合は分散分析と見ることができます。そういったバリエーションを包括する概念として線形モデルがあります。

*2:コーディングと呼ばれます。数値の割り当て方は、ダミーコーディングやエフェクトコーディングなどいろいろあります。