カプランとメンツィオを解決する:ショッピングタイム


6

カプランとメンツィオーズ 買い物時間モデル これは、定常状態の均衡のために変数を決定する必要がある場合の、検索と一致する失業モデルです。

  • $ J $:労働者の価値
  • $ u $:失業率

彼らの 定常状態 値($ \ dot J、\ dot u = 0 $)は次の連立方程式で与えられます。

$$ J = \ frac {(1- \ gamma)(S(u)+ y_e - y_u)} {\ rho + \ delta} \\ u = \ frac {\ delta} {\ delta + \ lambda(J)} $$

さらに、「価格分散による商品からの利益」と賃金は、それぞれ(12ページの式(6)、(7))で与えられます。

$$ S(u)= A(u)+ B(u)* w(u)\\ w(u)= y_u + \ gamma *(S(u)+ y_e - y_u) $$

$ A(u)、B(u)$は一連の定数とパラメータのプレースホルダです。$ u $に依存する場合があります。私は賃金を差し引いて解決します

$$ \チルダS(u)= \ frac {A(u)+ B(u)(y_u + \ gamma(y_e - y_u)} {1 - B(u)\ gamma} $$

次に、著者の校正とこのバージョンの$ \ tilde S(u)$を使用して、$ J $と$ u $の両方について解くことができます。ここにあります:

My computation

それらのキャリブレーションを考えると、それらは$(u、J)$空間上で2つの興味深い定常状態平衡を得ます:$(0.053、11.3)$と$(0.081、9.5)$。私の$ u(J)$グラフはこれら両方の軌跡を通るので正しいようです。しかし、$ J(u)$行は、$ u $を考えると「小さすぎる」ようです。

計算がやや​​難しい唯一のオブジェクトは$ S(u)$です。置換のステップが実際にうまくいくことを確認しました。$ \ tilde S(u)$を使用して$ w(u)$を計算し、$ S(u、w(u))== \ tilde S(u)$であることを確認しました。 (数値近似まで)。

私は誰かが私の過ちを見つけることを求めているのではなく、むしろそれをどこで探すべきかを尋ねています。興味のある人のために、これが私のPythonコードです:

# solves simple shopping time model
# only on the steady state equilibria

import numpy as np
import matplotlib.pyplot as plt

# all parameters for monthly
class Parameters(object):
    def __init__(self):

        self.psi_u = 0.27 # search twice, unemployed
        self.psi_e = 0.02 # search twice, employed < psi_u
        self.gamma = 0.74 # bargaining power
        self.alpha = 1 # BJ exponent in utility

        self.r = 15.7 # reservation price, home transformation
        self.c = 1 # production technology firm

        self.y_u = 4.91 # efficiency home
        self.y_e = 1 # efficiency firm

        self.rho = 0.003 # depreciation rate
        self.delta = 0.024 # separation rate

        self.phi = 1.24 # matching function efficiency
        self.k = 8.02 # search costs of labor for firm


def b(u, Param):
    return 1 + Param.psi_e + u*(Param.psi_u - Param.psi_e)
def s(u, Param):
    return 1 - u
def sigma(u, Param):
    return s(u, Param)/b(u, Param)
# seller meets buyer
def muOfU(u, Param):
    return np.minimum(1/sigma(u, Param), 1)
# buyer meets seller
def nuOfU(u, Param):
    return np.minimum(sigma(u, Param), 1)


def lambdaOfJ(J, Param):
    result = ( ((J/Param.k)**(Param.phi) - 1 )**(-1) + 1 )**(-float(1)/Param.phi)
    result[np.isnan(result)] = 0
    return result

# not needed atm, replaced within lambdaOfJ (instead of lambdaOfTheta)
def thetaOfJ(J, Param):
    #eta(theta)J = k
    #etaInverse = (eta^(-phi) - 1)^(1/phi)
    x = Param.k/J
    return (x**(-Param.phi) - 1)**(1/Param.phi)



def STilde(u, Param):


    A1 = muOfU(u, Param)*u*(1+Param.psi_u)/b(u, Param)
    A2 = 1 - 2*Param.psi_u*nuOfU(u, Param)/(1+Param.psi_u)
    A3 = Param.alpha*Param.y_u*(Param.r-Param.c)/Param.r
    A = A1*A2*A3

    B1 = muOfU(u, Param)*(1-u)*(1+Param.psi_e)/b(u, Param)
    B2 = 1 - 2*Param.psi_e*nuOfU(u, Param)/(1+Param.psi_e)
    B3 = Param.alpha*(Param.r-Param.c)/Param.r

    B = B1*B2*B3

    result = (A + B*(Param.y_u + Param.gamma*(Param.y_e - Param.y_u) ))/(1 - B*Param.gamma)
    return result

def S(u, wages, Param):
    A1 = muOfU(u, Param)*u*(1+Param.psi_u)/b(u, Param)
    A2 = 1 - 2*Param.psi_u*nuOfU(u, Param)/(1+Param.psi_u)
    A3 = Param.alpha*Param.y_u*(Param.r-Param.c)/Param.r
    A = A1*A2*A3

    B1 = muOfU(u, Param)*(1-u)*(1+Param.psi_e)/b(u, Param)
    B2 = 1 - 2*Param.psi_e*nuOfU(u, Param)/(1+Param.psi_e)
    B3 = Param.alpha*(Param.r-Param.c)/Param.r

    B = B1*B2*B3

    result = A + B*wages
    return result



def w(u, Param):
    return Param.y_u + Param.gamma*(STilde(u, Param) + Param.y_e - Param.y_u)

#result2 = A + B*w(u, Param)

def JSteadyState(u, Param):

    A = (1-Param.gamma)*(STilde(u, Param) + Param.y_e - Param.y_u )
    B = Param.rho + Param.delta
    return A/B

def uSteadyState(J, Param):

    B = Param.delta + lambdaOfJ(J, Param)
    return Param.delta/B


Param = Parameters()


# compute J(u) and u(J)
uGrid = np.linspace(0.001, 0.2, 100)
J = JSteadyState(uGrid, Param)

JGrid = np.linspace(5, 20, 1000)
u = uSteadyState(JGrid, Param)


# verify computation of S(u)
# wages given STilde:
wages = w(uGrid, Param)
# S given u, STilde
SOriginal = S(uGrid, wages, Param)
SWithTilde = STilde(uGrid, Param)

print max(abs(SWithTilde - SOriginal)) # 8.881784197e-16

# plot J(u) and u(J)
plt.plot(u, JGrid, label='u(J)')
plt.plot(uGrid, J, label='J(u)')
plt.legend()
plt.xlabel('u')
plt.ylabel('J')
plt.show()

あなたが提供するリンクは.pdfをダウンロードしますが、それは数学的表記に関して見るのに問題があるかもしれません。 Google Scholarは、そのような問題がないことを示す以下の無料ダウンロード可能なリンクも提供します se.shufe.edu.cn/upload/htmleditor / File / 140522081313.pdf
Alecos Papadopoulos

回答:


4

更新
著者の一人G.W.KaplanとのEメール通信の後、私は$ u = 0.05 $の2つのヌルクリンのクロスを得るために、空室掲載費用パラメータ$ k $の値を再調整しました。これは$ k = 7.41 $(四捨五入)で実現されます。さらに、この$ k $の値で、2番目(ただし3番目ではない)の定常状態になります。クローズアップ図:

enter image description here

これはまだ紙の図1と2が示すものではありません。 $ J $ -nullclineの形は問題のままです。それを私たちに与えるためにそれは最初の凹部とそれから凸部を持つべきです 定常状態しかし、私はそれ以上それ以上掘るつもりはありません。


$ u $ - nullcline

p.8では、作者は$ \ lambda(\ theta)\ equiv M(1、\ theta)$を定義しています(わかりやすくするために書いたはずです、$ \ lambda(\ theta)\ equiv M / u = M(1 、\ theta)$) pに。 25彼らは、マッチング関数を$ M(u、v)= uv(u ^ \ phi + v ^ \ phi)^ { - 1 / \ phi} $と指定します。したがって私たちは持っています

$$ \ lambda(\ theta)= \ theta(1 + \ theta ^ \ phi)^ { - 1 / \ phi} $$

これは、$ \ theta = 0 \が常に\ lambda(\ theta)= 0 $を意味することを意味します。

p.14、eq。 $(8)$を与える$ k&gt; J \は\ theta = 0 $を意味します。 校正段階では、$ k = 8.02 $です。 $ u $ -nullclineは次のように定義されています。

$$ u_ {SS} = \ frac {\ delta} {\ delta + \ lambda [\ theta(J))] $$

これらすべてが一体となって、 $$ J&lt; 8.02 \は、u_ {SS} = 1 $$を意味します

指定された他の関係式を使用して、小さな代数の後に、 $$ J> k = 8.02 \は\ lambda [\ theta(J)] = \ left(1-(k / J)^ {\ phi} \ right)^ {1 / \ phi} $$を意味します

これは確かにあなたのコードです、少し複雑です。そして実際、$ u $ - nullclineが$ J $ - nullclineと交差することはありません。団結に近い$ u $の値については以下を参照してください。 $ u $の低い値に対しては

\ begin {array} {| r | r |}   \ hline \ hline   \ text {u}&amp; \ text {Jss}&amp; \ text {uSS(J単位)} \\   \ hline 0.03&amp; A 12.25&amp; A 23.06 \\ 0.04&amp; A 11.53&amp; A 14.13 \\ 0.05&amp; A 10.86&amp; A 11.75 \\ 0.06&amp; A 10.23&amp; A 10.66 \\ 0.07&amp; A 9.64&amp; A 10.03 \\ 0.08&amp; A 9.09&amp; A 9.62 \\ 0.09&amp; A 8.57&amp; A 9.34 \\ 0.10&amp; A 8.09&amp; A 9.14 \\   \ hline \ end {配列}

$ u $ - nullclineは常に$ J $ - nullclineより上にあります。また、$ J $ - nullclineを因数$(1+ \ rho)$、すなわち方程式の離散版で "プッシュ"しました。しかし、$ \ rho = 0.003 $、マークアップが小さすぎるので、やはり交差点はありませんでした。 したがって、著者のシミュレーションに入ったことは、論文に記載されている式および較正されたパラメータ(表2)が示すものとは異なる点であると思われます。 または、何かが足りない。

$ J $ - nullcline
較正されたパラメータの値も含めて、OPのコードを1行ずつ確認しました。私はその紙が与えるものと少しの矛盾も見いだしなかった。それから、$ J $ -nullclineのコードをGretlにコピー&ペーストし、現地の言語に合わせて調整しました。 注: 紙の中でさまざまな大きさが定義されている方法

$$ \ psi_u&gt; \ psi_e \はb&gt; 1 \; \ forall u \は\ sigma = s / b&lt;を意味します。 1、\; \ forall u $$

$$ \は\ text {muOfU} \ equiv \ mu(\ sigma(u))= \ min(1 / \ sigma、1)= 1、\;を意味します。 \ $$ \ urall u $$

$$ \は\ text {nuOfU} \ equiv \ nu(\ sigma(u))= \ min(\ sigma、1)= \ sigma、\;を意味します。 \ $$ \ urall u $$

**GRETL script**  
solves simple shopping time model
 only on the steady state equilibria
     nulldata 100  
      genr series u = index/100   
        genr scalar  psi_u = 0.27 # search twice, unemployed
        genr scalar  psi_e = 0.02 # search twice, employed < psi_u
        genr scalar  gamma = 0.74 # bargaining power
        genr scalar  alpha = 1 # BJ exponent in utility

        genr scalar  r = 15.7 # reservation price, home transformation
        genr scalar  c = 1 # production technology firm

        genr scalar  y_u = 4.91 # efficiency home
        genr scalar  y_e = 1 # efficiency firm

        genr scalar  rho = 0.003 # depreciation rate
        genr scalar  delta = 0.024 # separation rate

        genr scalar  phi = 1.24 # matching function efficiency
        genr scalar  k = 8.02 # search costs of labor for firm

        genr series b =1 + psi_e + u*(psi_u - psi_e)
        genr series s = 1-u 
        genr series sigma = s/b
        genr series sigmareci = 1/sigma
        genr list  mlist = sigmareci const
        genr list  nlist  = sigma const
        genr series muOfU = min(mlist)  # seller meets buyer
        genr series nuOfU = min(nlist)  # buyer meets seller


# def STilde:

    genr series A1 = muOfU*u*(1+psi_u)/b
    genr series A2 = 1 - 2*psi_u*nuOfU/(1+psi_u)
    genr scalar A3 = alpha*y_u*(r-c)/r
    genr series A = A1*A2*A3

    genr series B1 = muOfU*(1-u)*(1+psi_e)/b
    genr series B2 = 1 - 2*psi_e*nuOfU/(1+psi_e)
    genr series B3 = alpha*(r-c)/r

    genr series  B = B1*B2*B3

    genr series STilde = (A + B*(y_u + gamma*(y_e - y_u) ))/(1 - B*gamma)

# def JSS

genr series JSS = (1-gamma)*(STilde + y_e - y_u ) / (rho+delta)

値を取得しました

enter image description here

そしてグラフ

enter image description here

上記から、$ J $ -nullclineは増加し始めますが、$ 8 $という値には近づくことはありません。これは、$ u $ -nullclineの低い漸近線です。


広告1):実際には、著者はいくつかの時点で言う 本稿の残りの部分では[...]連続時間で作業する方が便利です。 。広告2):はい、私はそれが問題になることを期待しています:しかし、何が悪くなる可能性がありますか? $ S(u、w(\ tilde S、u))== \ tilde S(u)$であることを示します。これは、$ S(u、w)$が正しく計算されていることを示しています。その方程式にそれほど多くはありません。
FooBar

1)について、私はその引用を読んだが、時々そのようなコメントは実際のシミュレーションにまで及ばない - それらは理論的探究だけを意味するかもしれない。 2)に関して言えば、私は記号のような浅い間違い、あるいはあなたが書いた実際のスクリプトの中でそれが構造的な間違いではないことをもっと意味していました。
Alecos Papadopoulos

はい、あなたの主張は正しいです。あなたは私がするのと全く同じ値を得ます - しかしこれらは小さすぎます: (0.081, 9.5)も、 (0.05, 11.3) - この2点を中心に、代わりに J の値 9.1 そして 10.8
FooBar

@FooBarそれでは念のため、$ u $ -nullclineもダブルチェックしたいと思います。論文のどこで$ \ lambda()$と$ \ theta()$関数のための明示的な関数形式を提供していますか。実装可能な関数形式ではなく、一般的な定義があります。
Alecos Papadopoulos

7ページの$ M $の関数として$ \ lambda $と$ \ theta $が見つかります。$ M $は$ M(u、v)= uv(u ^ \ phi + v ^ \ phi)と定義されます。 24ページの^ { - 1 / \ phi} $。
FooBar

1

この問題は、計算操作の精度の限界によって引き起こされる可能性があります。 Pythonパッケージ ビッグフロート これを排除することに興味があるかもしれません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.