児童虐待の専門職が 心理学や統計学を語るブログ

心理学や、心理学研究における統計解析の話など

彼氏彼女を作るためにロジスティック回帰モデルを活用する方法(恋愛心理学と統計)

「どうやったら彼女(彼氏)ができるんだろう」
きっと世の中の誰しもが、恋人ができないことについて悩んだことがあるはずです。
私も例に漏れず、特に中学時代は異性のことしか頭になく、そのせいでか成績は常に最底辺を這いつくばるカス生徒でした。

中学時代を思い起こしてみると、「どうやったら恋人ができるか」についてはクラスの恋愛未経験者の知恵(妄想のみ)を集めて何度も議論してみたものです。
そしてついに異性とのデートにこぎつけた時、意味も分からずメンズノンノ(名前聞いたことあったから)やKERA(女の子が可愛かったから)を読んで、それっぽい知識や異性の生態なんかをリサーチし、その結果失敗を繰り返していたにも関わらず、周囲には「結構いい感じだったw」とうわべを取り繕う悲し過ぎる嘘を繰り返していました。
しかし周囲には嘘だと気付かれなかったため(恋愛事前分布がない連中だったから)、様々な質問をされては想像でちぐはぐな回答を繰り返し、質問した側もよく分かっていないので「スゲー」となるという、マヌケがマヌケの言うことを真に受ける地獄のような状況が展開されていました。

今回の話は、そんな悲劇が日本で繰り返されないために、私なりに考えた恋愛心理学です。

恋人ができない(0)という状況から、いかにして恋人ができた(1)という状況に変化させるかを考えます。つまり、どんな変数が得られれば、恋人ができない(0)⇒恋人ができた(1)となるか、と言い換えられます。
目的変数はすなわち、恋人の有無です。有無だけなので、0or1の2変数データです。
説明変数は以下の表の通りです。
f:id:romancingsame:20200802162009g:plain

この説明変数がどれだけ恋人の有無という目的変数に影響するか、を分析する方法として、ロジスティックモデルを用いた回帰分析があります。
ロジスティック回帰分析とは、重回帰分析と近い分析方法で、複数の説明変数を用いて1つの目的変数を説明・表現するという意味では雰囲気が似ています。
重回帰分析では、説明変数が目的変数の値を変化させます。そのため、説明変数から目的変数の「値」を予測可能です。
一方、ロジスティック回帰分析で考えるのは「特定の現象の有無」です。係数の得られた各変数に実際の数値を入力していき、目的変数である「特定の現象」が発生する確率を導く、という使い方ができます。また後半に説明しますが、オッズ比というのを利用し、○○は××に比べて~倍「特定の現象」が生起する確率が高い、という表現が可能になります。

では、実際に分析してみます。
以下のStanコードを使用して実際に分析しました。無駄に身長と収入を階層モデルにしていますが、そこら辺は特に自由にやって大丈夫です。
data {
int I;//被験者数
int y[I];//目的変数
int s[I];//性別
real high[I];
real money[I];
int b1[I];
int b2[I];
int b3[I];
int b5[I];
int b7[I];
int b8[I];
}

parameters {
real intercept;
real bhigh;
real bmoney;
real bs;//0:女、1:男
real bexfrend;//元恋人数
real balc;//週の飲酒数
real bfas;//おしゃれ:1
real bmarry;//既婚者:1
real bface;
real balone;//一人暮らし:1
real mu_hi;
real s_hi;
real mu_mo;
real s_mo;
}

transformed parameters {
real q[I];
for (i in 1:I)
q[i] = inv_logit(intercept + bhigh*high[i] +bmoney*money[i] + bs*s[i] +
bexfrend*b1[i] + balc*b2[i] + bfas*b3[i] +
bmarry*b5[i] + bface*b7[i] + balone*b8[i]);
}

model {
for (i in 1:I)
high[i] ~ normal(mu_hi,s_hi);
for (i in 1:I)
money[i] ~ normal(mu_mo,s_mo);
for (i in 1:I)
y[i] ~ bernoulli(q[i]);
}

得られた結果は下の通りになります。
f:id:romancingsame:20200802162115g:plain

これらの係数のmean値(平均値)より恋人の有無は

  • 13.63(exp) + 15.74*身長(exp) +1.75*収入(exp) - 0.43*性別(exp) + 0.21*元恋人数(exp) - 0.62*週の飲酒量(exp) + 1.64*おしゃれかどうか(exp) - 0.08*既婚かどうか(exp) + 0.83*顔魅力(exp) + 0.32*一人暮らしかどうか(exp)

によって決まることがデータから分かりました。
しかしこの式の(exp)って何なんでしょうか。この式の(exp)という部分、ここが重回帰分析と異なる大きなポイントになります。

ロジスティック回帰は、リンク関数としてロジット関数を用いているので、係数の解釈がやや複雑になります。松浦(2016)を参考に、以下で解釈を進めていきます。
オッズという概念があります。オッズとは、「失敗するよりも何倍成功しやすいか」を表した指標で、オッズ=p/(1-p)で表現されます。pは確率値です。このオッズの変数比はオッズ比と呼ばれます。
ロジスティック回帰モデルの回帰係数に指数関数expを適用するとオッズ比になります。そのため、回帰係数は対数オッズ比であると解釈されます。
上の結果だと、正の値になっているものは、その変数が増えるほど(1であるほど)恋人の獲得率が上がります。
そこからオッズ比を算出して、具体的な比率を出していくという流れです。

以上により、解釈は色付けしたオッズ比の部分を参照して行います。
解釈例1:身長が180㎝の男女は、160㎝の男女に比べ、2.52倍の確率で恋人を獲得しやすい(注:身長が20㎝伸びると恋人ができる確率が2.52倍になる、という解釈はできない)
解釈例2:男性は、女性と比較して、0.65倍の確率で恋人を獲得しやすい(男性の方が恋人ができにくい)
という感じになります。
結論として、オシャレな長身で美男美女で金を稼いで、飲酒を少なくして1人暮らしをしたら恋人ができます。また、男性よりも女性の方が倍くらいの確率で恋人ができますので、男は一層頑張って欲しいところです。
ついでに、このデータは仮想データなので、結果も妄想のようなものなのですので注意してください(分析は真面目にやりました)。

※追記 2020.8.23
先日某先生と話していて、オッズ比とリスク比の話になりました。というか、こんなエントリー書いておいて「リスク比って何ッスかwww」と醜態をさらしてしまい、先生の話を聞きながら「オッズ比 リスク比 とは」と中学生がググる時みたいなメモを書き、自宅での勉強のためにメールでメモを送信しました。
オッズ比とリスク比の違い:オッズが二者の比を表す一方で、リスクは全体の中で恋人がいる割合などを表します。
このエントリーの事例でリスク比を用いてみたいと思います。分かりやすいように、イケメンかどうかが、恋人の有無にどう関わっているかを表にまとめてみたいと思います。
f:id:romancingsame:20200823122836g:plain
この表を用いてリスク比を計算してみますと、イケメンの恋人率は86%、非イケメンの恋人率は41% ですからリスク比は2.1です。イケメンの方が2倍近く恋人のいるリスクが高い、という表現になります。
オッズ比の2.29とほぼ似たような値になりました。
解釈上はどうも、「非イケメンがイケメンになったからといって、今の2倍強の確率で恋人ができるようになる」みたいにはならないようなので注意。
とあるサイト(http://www.snap-tck.com/room04/c01/stat/stat10/stat1001.html)では「リスク比は目的変数が名義尺度の時のラフな指標です。 目的変数が計量尺度の時は、回帰直線を利用して目的変数の値そのものを求めることができます。 したがって通常はラフな指標であるリスク比をわざわざ求める必要はない」という記述がありました。リスク比ってそういうもんなんだな、オッズ比が出せればそれでいいのかな、程度の気分でいようと思います。

参考
松浦 健太郎・石田 基広(2016). StanとRでベイズ統計モデリング 共立出版