データ分析と可視化

R言語のglm()でロジスティック回帰を実行する方法|結果の見方と予測

はじめに

「R言語でロジスティック回帰を実行したいけれど、glm()関数をどう書けばよいのだろう」
「モデルは作成できたものの、summary()の結果や係数の意味、予測の方法がよく分からない」と感じていませんか。

たとえば、二値分類の分析を行おうとしてサンプルコードをそのまま実行したものの、family = binomialの指定や出力結果の見方が理解できず、次に何を確認すればよいのか迷ってしまうことがありますよね。

この記事では、R言語のglm()関数を使ったロジスティック回帰の基本的な実行方法から、出力結果の見方、予測値の求め方までを順を追って説明していきます。

R言語のglm()でロジスティック回帰を行う基本

ロジスティック回帰をR言語で実行するには、まずロジスティック回帰がどのようなデータを対象とする分析手法なのかを理解し、glm()関数で適切な設定を行うことが大切です。

ここでは、ロジスティック回帰が2値データの分析に用いられる理由と、glm()でfamily = binomialを指定する意味について順を追って説明していきます。

ロジスティック回帰

ロジスティック回帰は、結果が0と1のように2つの値だけを取る目的変数を分析する手法です。

たとえば、0を「失敗」、1を「成功」のように設定し、説明変数との関係からそれぞれの結果になる確率を推定します。

目的変数が連続した数値ではなく2値データである場合に用いられ、各データが1になる確率を0~1の範囲で求められることが特徴です。

glm()でfamily = binomialを指定する理由

glm()でロジスティック回帰を実行する場合は、family = binomialを指定します。

これは、目的変数が0と1の2値データであることをRに伝え、二項分布を前提としたロジスティック回帰モデルとして推定するためです。

family = binomialを指定しない場合は線形回帰として処理されるため、2値データに適した分析結果は得られません。

glm()を使ったロジスティック回帰の実行方法

glm()でロジスティック回帰を実行するには、分析に使用するデータの構造を確認したうえで、関数の基本構文と引数の指定方法を理解することが重要です。

ここでは、目的変数と説明変数の考え方を確認し、glm()の基本的な書き方からサンプルデータを使ったロジスティック回帰の実行方法まで、順を追って説明していきます。

分析に使うデータと目的変数・説明変数を確認する

glm()を実行する前に、分析に使用するデータと目的変数・説明変数を確認します。

目的変数は0と1の2値データになっていることを確認し、説明変数には目的変数との関係を調べたい項目を指定します。

また、変数名やデータ型に誤りがないことを事前に確認しておくと、glm()の実行時にエラーを防ぎやすくなります。

glm()の基本構文と主な引数

glm()の基本構文は、glm(目的変数 ~ 説明変数, family = binomial, data = データ名)です。

目的変数 ~ 説明変数には分析する変数を指定し、family = binomialにはロジスティック回帰を実行することを指定します。

また、dataには分析対象のデータフレーム名を指定し、使用するデータを設定します。

サンプルデータでロジスティック回帰を実行する

サンプルデータを使ってロジスティック回帰を実行するには、glm()に目的変数、説明変数、family = binomial、データフレーム名を指定して実行します。

実行すると、推定結果を含むモデルオブジェクトが作成されます。

作成したモデルは、summary()で係数やp値を確認したり、predict()で予測確率を求めたりする際に使用します。

glm()によるロジスティック回帰の結果の見方

glm()でロジスティック回帰を実行した後は、出力結果を正しく読み取ることが重要です。

ここでは、summary()で確認できる各項目の意味を整理し、Estimateやp値の見方、係数からオッズ比を求める方法、95%信頼区間を使った結果の解釈まで、順を追って説明していきます。

summary()で分析結果を確認する

ロジスティック回帰の実行後は、summary(モデル名)を実行して分析結果を確認します。

summary()には係数、標準誤差、z値、p値などが表示され、各説明変数が目的変数にどのような影響を与えているかを確認できます。

モデルの結果を解釈する際は、まずsummary()で各項目を確認することが基本です。

Estimate・Std. Error・z value・p値を読み取る

summary()の結果では、Estimateは回帰係数、Std. Errorはその標準誤差、z valueは回帰係数を標準誤差で割った値、Pr(>|z|)はp値を表します。

一般的には、p値が0.05未満であれば、その説明変数は目的変数と統計的に有意な関係があると判断します。

まずp値で有意性を確認し、その後にEstimateの符号や大きさを見て影響の方向を読み取ります。

p値の基準や「統計的に有意」の意味がまだ曖昧な場合は、先に基本的な考え方を確認しておくと、ロジスティック回帰の結果を判断しやすくなります。
▶p値とは?0.05の意味と統計的有意差の見方をわかりやすく解説 

係数からオッズ比を求めて解釈する

ロジスティック回帰の係数は対数オッズで表されるため、そのままでは解釈しにくい場合があります。

exp()を使って係数を指数変換するとオッズ比を求められ、説明変数が1単位増加したときにオッズが何倍になるかを確認できます。

オッズ比が1より大きければオッズは増加し、1より小さければオッズは減少すると解釈します。

オッズ比が「1より大きい・小さい」ことは分かっても、具体的にどう読み取ればよいか迷う場合は、オッズと確率の違いから整理しておくと理解しやすくなります。
▶オッズ比とは?意味や計算方法・結果の見方をわかりやすく解説 

【内部リンクを入れる場所】

95%信頼区間を確認する

95%信頼区間は、推定した係数やオッズ比の推定範囲を確認するために用います。

confint()で係数の95%信頼区間を求め、オッズ比で確認したい場合はexp(confint(モデル名))を実行します。

オッズ比の95%信頼区間に1が含まれなければ、その説明変数は目的変数と統計的に有意な関係があると判断できます。

glm()で作成したモデルから予測確率を求める

ロジスティック回帰モデルを作成した後は、そのモデルを使って新しいデータや既存データの予測を行えます。

ここでは、predict()関数で予測値を取得する方法と、type = "response"を指定して0~1の予測確率を取得する方法について、順を追って説明していきます。

predict()で予測値を取得する

predict()を使うと、glm()で作成したロジスティック回帰モデルから予測値を取得できます。

predict(モデル名)を実行すると、既定では各データに対する線形予測子(対数オッズ)が返されます。

学習データだけでなく、新しいデータをnewdataに指定して予測値を取得することも可能です。

type = "response"で予測確率を取得する

predict()で予測確率を取得するには、type = "response"を指定します。

predict(モデル名, type = "response")を実行すると、各データが目的変数1になる確率を0~1の範囲で取得できます。

対数オッズではなく確率として結果を確認できるため、予測結果を解釈しやすくなります。

予測確率を求めたあと、「何%以上なら1と判定すればよいのか」と迷う場合は、分類のしきい値と評価方法もあわせて確認しておくと判断しやすくなります。
▶ロジスティック回帰のしきい値はどう決める?分類基準とモデル評価の考え方を解説 

まとめ

R言語でロジスティック回帰を行うときは、目的変数や説明変数のデータを確認したうえで、glm()を使ってモデルを作成します。

分析後は回帰係数やp値だけで判断せず、オッズ比や信頼区間もあわせて確認すると、説明変数と目的変数の関係をより理解しやすくなります。

また、作成したモデルは結果を確認するだけでなく、predict()を使って予測確率を求めることもできます。

まずはサンプルデータで「モデル作成→結果の確認→予測」という一連の流れを試しながら、ロジスティック回帰の使い方に慣れていきましょう。

-データ分析と可視化
-, ,