Experimetrics: 16.3.2 Computing the probabilities in the QRE model

今回はExperimetrics本の16.3.2で紹介されているQRE(Quantal Response Equilibrium)の数値計算をRでやってみました。


Rosenthal et al. (2003)に登場するpursue-evadeゲームのQREを求めます。

link.springer.com


ゲームの利得表は次のとおりです。各プレイヤー、0と1の2つの戦略を有します。

Player 2
0 1
Player 1 0 1,-1 0,0
1 0,0 2,-2

元のゲームでは各プレイヤーの戦略はLとRです。ここではLを0、Rを1としています。そして、Player 1(pursuer)が戦略0を選ぶ確率をp、Player 2(evader)が戦略0を選ぶ確率をqと置いています。このとき、Player 1の各戦略の期待利得はそれぞれ
\begin{align*}
ep1_0(q)&=1\times q+0\times (1-q)=q\\
ep1_1(q)&=0\times q+2\times (1-q)=2(1-q)
\end{align*}
となります。同様に、Player 2の各戦略の期待利得はそれぞれ
\begin{align*}
ep2_0(p)&=-1\times p+0\times (1-p)=-p\\
ep2_1(p)&=0\times p+(-2)\times (1-p)=-2(1-p)
\end{align*}
となります。求めたいQREは、
\begin{align*}
p&=\frac{e^{\frac{ep1_0(q)}{\mu}}}{e^{\frac{ep1_0(q)}{\mu}}+e^{\frac{ep1_1(q)}{\mu}}}\\
q&=\frac{e^{\frac{ep2_0(p)}{\mu}}}{e^{\frac{ep2_0(p)}{\mu}}+e^{\frac{ep2_1(p)}{\mu}}}
\end{align*}
という非線形連立方程式を満たすpとqになります。ギリシャ文字のミューはプレイヤーの合理性の程度を表すエラーパラメーターです。0に近づくほど完全合理的になり、無限に近づくほど完全非合理的(ランダムに各戦略を選択)になります。


以下がRのプログラムになります。

# player 1's payoffs
u1_00<-1
u1_01<-0
u1_10<-0
u1_11<-2

# player 2's payoffs
u2_00<--1
u2_10<-0
u2_01<-0
u2_11<--2

fn<-function(x,mu){
  p<-x[1]
  q<-x[2]
  ep1_0<-u1_00*q+u1_01*(1-q)
  ep1_1<-u1_10*q+u1_11*(1-q)
  ep2_0<-u2_00*p+u2_10*(1-p)
  ep2_1<-u2_01*p+u2_11*(1-p)
  belief1<-exp(ep1_0/mu)/(exp(ep1_0/mu)+exp(ep1_1/mu))
  belief2<-exp(ep2_0/mu)/(exp(ep2_0/mu)+exp(ep2_1/mu))
  c(p-belief1,q-belief2)
}

library(nleqslv)
mu_vec<-seq(0.01,10,0.01)
niter<-length(mu_vec)
p_vec<-numeric(niter)
q_vec<-numeric(niter)
for (i in 1:niter) {
  fn_mu<-function(x){
    fn(x,mu_vec[i])
  }
  solutions<-nleqslv(c(0.5, 0.5), fn_mu)
  p_vec[i]<-solutions$x[1]
  q_vec[i]<-solutions$x[2]
}
plot(mu_vec,p_vec,ylim=c(0,1),ylab="probabilities",pch=16,col='red') 
par(new=T)                                          
plot(mu_vec,q_vec,ylim=c(0,1),ylab="",pch=16,col='blue')
abline(h=0.5)
legend("topright", legend = c('p','q'), col = c('red','blue'), pch = c(16,16))

mu_p_q<-data.frame(mu=mu_vec,p=p_vec,q=q_vec)
write.csv(mu_p_q,
          "/Users/Hiro/Documents/R/moffatt/mu_p_q.csv",
          row.names=FALSE)

ここで求めるQREはExperimentrics本16.4で被験者データから合理性の程度を表すエラーパラメーターの推定に用いるため、プログラムの最後でcsvファイルとして書き出しています。
hiroecon.hatenablog.com

プログラムではエラーパラメーターの値を0.01から10まで0.01刻みで変化させ、各ミューの値に対し上記の非線形連立方程式の解であるpとqを求めます。非線形連立方程式を解く必要があるので、プログラムの中でnleqslvというパッケージを使用しています。パッケージの詳細についてはこちらを御覧ください。

CRAN - Package nleqslv


求めたQREを図にしてみました。横軸はエラーパラメータのmuの値(0.01から10まで0.01刻み)、縦軸は確率を表しています。Experimentrics本p.393の図16.2と同じ図が描けました。ミューの値が0に近づくと、pとqの値がそれぞれ混合戦略ナッシュ均衡に収束していきます。一方ミューの値が大きくなるについて、pもqも0.5(つまり、各戦略を等確率で選ぶ)に近づいているのがわかると思います。

f:id:hiroecon:20180526163055p:plain