Advanced Econometrics (Hiroki Kawai) Ⅵ 2014 spring 回帰診断:操作変数法(IV 法)、一般化最小2乗法(GLS 法) 古典的回帰モデルの仮定 (A1)線形性(Linearity):y=Xβ+ε (A2)説明変数間に多重共線性がない(Full Rank): rank(X)=K (A3)説明変数の外生性(Exogeneity): E(ε|X)=0 X ε X:fixed or random ①E(εi)=0 ②E(xjkεi)=Cov(εi,xjk)=0 (A4)誤差の分散均一性と誤差間独立性(Spherical Disturbances): E(εε’|X)=σ2I ① Homoschedasticity:Var(εi|X)=σ2 ②Nonautocorrelation:Cov(εi,εj|X)=0 (A5)説明変数が非確率変数(A3)・確率変数 (A6)正規性(Normality): ε|X ~N(0,σ2I) (AD5)定常性(stationarity):plim 問題 A2 多重共線性(p-129) A3 説明変数と残差の相関 (chap8):Cov(X,ε)≠0 ③ X の内生性 ②測定誤差 ③特定化のエラー AD5 非定常データ(chap21) A4 分散不均一性(chap9) E(εε’)=diag[ …. 2 1 A4 系列相関(chap20) E(εtεt-s)≠0 XX =Q n 不偏性 有効性 診断法 説明変数Xの問題 ○(b は不安定) 安定性、VIF E(b)=β Hausman 検定(p-321) +Cov(X,ε)/Var(X) 過剰識別検定 ○ × DFTest→共和分検定 残差εの問題 × 残差テスト ] 2 n ○ × 残差テスト 解決策 変数の削減 IV(p-282) ECM の推定 HCSE GLS HACSE GLS 説明変数と残差の相関 E(εi|xi)≠0→Cov(xi,εi)=E(xiεi)=plim 1n X’ε=γのとき b= cov( X , Y ) cov( X , X ) var( X ) cov( X , ) cov( X , ) var( X ) var( X ) var( X ) var( X ) b=β+(X’X)-1X’ε →plim b=β+plim( 1n X’X)-1plim( 1n X’ε)=β+Q-1γ≠β see p-66, 76 1 操作変数法、2段階最小2乗法 chap 8 1.1 撹乱項と説明変数との相関が生じる場合(p-259) (1)Dynamic Model(ラグつき内生変数モデル)+残差の系列相関 Ct=α+βYt+γCt-1+εt, εt=ρεt-1+vt (2)同時方程式(Simultaneous Equations):内生変数を含んだモデル ・消費関数 C=α+βGDP+ε,GDP=C+I→GDP=(α+I+ε)/(1-β) cov(GDP, ε)=cov[ b=β+ I var( ) ,ε]= >0 となることから 1 1 var( ) >β (1 ) var(GDP) 上方バイアスが生じる!! ※市場間の相互依存関係を考えると、経済変数のほとんどが内生変数であるといえる! 17 Advanced Econometrics (Hiroki Kawai) 2014 spring (3)説明変数に観測エラーが存在(Errors in Variables)→薄められる(attenuation bias) 真の値 X*の代わりに誤差 v を含んだ変数 X=X*+v しか我々は観察できないとき… 真の関係式から Y=α+β(X-v)+ε=α+βX+u, u=-βv+εが得られることから 我々が推計できる関係式では var(X)=var(X*)+var(v)、cov(X,u) =cov(X*+v,-βv+ε)= -βvar(v)<0 のように X と u とには相関が生じる! P-279 b= cov( X , u ) var(v) 1 <β 下方バイアスが生じる! * var( X ) var( X ) var(v) 1.2 操作変数法(Instrumental Variable Estimation Mthods)p-265 (1)操作変数 Z 「X とは相関があるが、εとは相関がない Z を操作変数とする」 2 条件:i)Relevance 関連性[cov(Z,X)≠0] ii)Exogeneity 外生性[cov(Z,ε)=0] ※外生性と同時に Exclusion 唯一経路性 cov(Z,y)=0 を加える場合もある ①経済モデルの外生変数(気候、自然災害 etc):「気温→内生変数」「気温 内生変数」 ②ラグつき変数(「過去→現在」「過去 現在」) 例) C=α+βY+εにおいて I はYと相関をもつが,εとは相関をもたない→I が操作変数 (2)操作変数法 dY dY / dZ cov(Y , Z ) var(Z ) cov(Y , Z ) 1 → b IV ( Z X) Z y dX dX / dZ cov( X , Z ) var(Z ) cov( X , Z ) cov(Y , Z ) cov( X , Z ) cov(Z , ) ① 一致性 bIV= p-265 cov( X , Z ) cov( X , Z ) cov( X , Z ) bIV Z の「外生性(Exogeneity)」と「相関性(Relevance)」が成立すれば…→bIV=β ※上記の条件を満たさない IV は week instruments と呼ばれる。 1 Z X 1 Z ε ~N(0, 2 Q ZX1 Q ZZ Q ZX1 ) p-266 n (b IV β) ② 漸近的正規性 n n 2 1 1 2 ' 2 Est. Asy.Var(bIV)= ˆ ( Z' X) (Z' Z)( X' Z) 、 ˆ 1n ( y i x i b IV ) (3)2 段階最小二乗法(2 Stage Least Square Method) p-270 ①説明変数Xi を操作変数 Zi で回帰する: Xˆ i d 0 d 1 Z i vi , d1=cov(X,Z)/var(Z) ②被説明変数Yi を Xi の理論値で回帰する: Yi=a+b Xˆ +εi i cov(Y , Xˆ ) cov(Y , Z ) cov(Y , Z ) bIV d1 var(Z ) cov( X , Z ) var( Xˆ ) cov(Y, Xˆ )=cov(Y,d0+d1Z)=d1cov(Y,Z), var( Xˆ )=var(d0+d1Z)=d21var(Z) b2 SLS ※操作変数の数 L > 説明変数の数K p-271 ˆ ): X ˆ Z(Z' Z) Z X ①L個の情報をK個へ効率的に縮約する(Z→ X 1 ˆ をとした操作変数法 ②X ˆ ' X) 1 X ˆ ' y (X ˆ 'X ˆ ) 1 X ˆ ' y X' Z(Z' Z) 1 Z' X X' Z(Z' Z) 1 Z' y b IV ( X 例 8.5 (p-272) 労働供給関数 LS≠IV、Z を変えると IVE も変化 18 Advanced Econometrics (Hiroki Kawai) 2014 spring 1.3 推定の実際 (1)どのように操作変数を選ぶのか?:構造方程式に登場するが外生変数 税率や公的支出などの政策変数、天災や気候等自然現象 ラグつき内生変数(系列相関がある場合は不適切) (2)IV は OLS よりもバイアスが大きくなる恐れがある(小標本において) p-289 corr ( z , ) IV corr ( z , x ) x b 1)Z とεが相関を持つ時、1段階目の回帰バイアスは2段階目のバイアスをさらに大きくする 2)Z と X が相関しない時もバイアスが大きくなる→Z と X の相関はチェックする必要あり 1.4 IV 推定における 3 検定 (1) 適切な IV を選択しているか? Instrument Relevance Test Xˆ i d 0 d1 Z i vi において d1=0 を検定→F 検定(IV が 1 つのときはt検定)、R2 (2) IV とεの直交性 E(Ziεi)=0 過剰識別(Overidentification)検定 p-278 m= 1n Z i e IVi →m’[Var(m)]-1m~χ2(L-K)、 Var(m)= n12 ( z i e IVi )( z i e IVi ) または TSLS 残差 e2SLS=Zδ+νで Ho:δ=0 を検定 J=LF~χ2(L-K) 例 8.8 (p-279) 労働供給関数 E(Z,ε)=0 を採択 (3) OLS を利用すべきか、IV を利用すべきか? Hausman Specification Test p-274 H0:Cov(X,ε)=0→bIV=bLS →Wald 検定量 H=0 → 通常の最小二乗法で十分 H1:Cov(X,ε)≠0→bIV≠bLS →Wald 検定量 H>0 → IV 法を用いるべき H=d’[Ver(d)]-1d~χ2(K) d=bIV-bLS に関する Wald 検定量 Var(d)= Var(bIV)+Var(bLS)―Cov(bIV,bLS)―Cov(bLS,bIV)=Var(bIV)-Var(bLS) 1 1 1 ˆ 'X ˆ ) ( X' X) d /s2 ~ χ2(K) s2=e’e/(n-K) 1)H= d' ( X 2) Variable addition test / Wu test (簡便な検定方法、p-276) ˆ =Z(Z’Z)-1Z’X を得る (step1) X を Z で回帰するX=Zγ+v→fitted value X ˆ δ+u を行ない、H0:δ=0 を F=t2~F(1, n-K)で検定を行う (step2) 補助回帰 y=Xβ+ X 例 8.6 (p-276) 労働供給関数 Wu test→δ≠0 なので Wage の外生性は棄却 例 8.7 (p-277) 消費関数 H test(H>0), Wu test(δ≠0)→Yt の外生性は棄却 19 Advanced Econometrics (Hiroki Kawai) 2014 spring 2 一般化最小2乗法(Generalized Least Square Method)chap 9, 20 2.1 non-spherical disturbances Var(ε)= E(εε’)=V=σ2Ω≠σ2I ①分散不均一性(heteroschedasticity):cross section data において生じやすい 特定化の誤り、データの集計→Var(εi)=σ2i, ②系列相関(serial correlation):time series data において生じやすい 特定化の誤り、季節調整→Cov(εiεj)=σij≠0 ※特定化の誤り:非線形性、除外された変数、習慣・調整コストの存在 ※時系列的相関だけでなく空間的相関も存在する(外部効果など) ※AR(1)process では(AR(p), MA(p)もある) εt=ρεt-1+vt=ρ(ρεt-2+vt-1)+vt=ρ2εt-2+ρvt-1+vt=vt+ρvt-1+ρ2vt-2+ρ3vt-3+… E(εt)=0, E(εtεt)= v /(1-ρ2)=σ2ε, Cov(εtεt-1)=ρσ2ε, Cov(εtεt-s)=ρsσ2ε 2 ρが大きいほどσ2εは大きくなる ①βの OLSE は不偏性、一致性、正規性、漸近的正規性を満たす ∵ b=β+(X’X)-1X’ε E(b-β)=E[(X’X)-1X’ε]=0 ②Var(b)=σ2(X’X)-1 は biased / inconsistent なので、誤った仮説検定をする恐れがある var(b)=E(b-β)(b-β)’=E[(X’X)-1X’ε][ε’X(X’X)-1]= (X’X)-1X’V’X(X’X)-1 対処 A:変数の追加 対処 B:変数変換(対数、比率) 対処1:E(εε’)=V の構造がわからなければ、Var(b)の consistent estimator(HCSE)を 求めそれにもとづいて正規検定を行なえるが、それは有効推定量ではない。 対処2:E(εε’)=V の構造がわかるならば、βの BLUE を GLSE より求める ˆ bGLS=(X’V-1X)-1X’V-1y=(X*’X*)-1X*’y*,X*=PX,y*=Py→bFGLS=(X’ V V=σ2Ω、V-1= 12 Ω-1、Ω-1=P’P 1 ˆ X)-1X’ V 1 y ※Cov(X,ε)≠0 の場合はGMM推定量がある。 P-961 2.2 LSE への影響 ①βの LSE は不偏性、一致性、正規性、漸近的正規性を満たす ∵ b=β+(X’X)-1X’ε → E(b-β)=E[(X’X)-1X’ε]=0 ②βの分散共分散行列の LSE は biased/inconsistent→誤った仮説検定をする恐れがある: var(b)=E(b-β)(b-β)’=E[(X’X)-1X’ε][ε’X(X’X)-1]= (X’X)-1X’V’X(X’X)-1 ≠σ2(X’X)-1 2.3 Residual Test(1):分散不均一性のテスト (p-315) (1)残差のプロット ei(ei2) - Yi plot (p-309 事例 9.1) Goldfeld-Quandt(1965) F Test:小標本のとき有効、基準が1つのみ 2 つのサブサンプル間の分散が等しいか否かを検定する 1)σ2i と相関のある変数(Yi, Xi, Zi)に関してデータを並べ替える 2)下位 1/3 と上位 1/3 で求めた残差 2 乗和の比率 e1' e1 /(n1 K ) ~F(n1-K,n2-K) e '2 e 2 /( n2 K ) (2)補助回帰に基づく検定 ˆ i2 =ei2=d0+d1Z1i+d2Z2i+…+dpZpi で H0:d1=d2=…=dp=0 を検定 ESS / p R2 / p i) F 検定量 F= RSS /(n p 1) (1 R 2 ) /(n p 1) 20 R2 は補助回帰の決定係数 Advanced Econometrics (Hiroki Kawai) ii) LM test(Score test) 2014 spring LM= s (d)I dd s(d) ~χ2(p) 1 ①方法1: Breusch-Paggan(1979) Test 1)OLS の実施→OLS 残差 ei Econometrica 47:1287-94 テキスト p-316 2)補助回帰 ei2/s2=Ziγ+vi, s2=Σei2/n の実施 3)LM= 1 ESS =nR2~χ2(p) 2 ②方法2:漸近的に同等な方法 3)LM=nR2~χ2(p) 2)補助回帰 ei2=Ziγ+vi の実施 証明は Johnston(1997) p-198、 Ruud p-425、蓑谷(1996) p-103 ③White(1980) General Test: Z=(X, X’X) テキスト p-315 general but nonconstructive 2)補助回帰 ei2= Xiγ1+ Xi’γ2Xi 3)LM=nR2~χ2(p) ④簡便法 2)補助回帰 ei2=γ0+γ1 yˆ i の実施 3)nR2~χ2(1) or γ1 のt検定 ※特殊な分散不均一性 ARCH(q): 2 t ARCH(q)、GARCH(p,q) テキスト p-970 0 1 t21 .... q t2 q 2.4 Residual Test(2):系列相関のテスト (p-962) (1) 残差のプロット テキスト p-944, 945 (2) Durbin-Watson(1971,Biometrica)検定 H :ρ=0 を検定。DW= T 0 t 2 (et et 1 ) 2 T 2 t 1 t テキスト p-963 ee ˆ = e T ≒2(1- ˆ ), e t 2 t t 1 T 2 t 1 t 定数項を含むモデル・非確率変数 X・εt の正規分布の AR(1)過程を前提として d~f(X,y)→d の分布の下限 dL(n,k’)と上限 dU(n,k’),k’=k-1→臨界値の表 original(15≦n≦100,k’≦5)→Savin-White1977,ECMT(6≦n≦200,k’≦10) 0(ρ=1)—dL—dU—2(ρ=0)—4-dU—4-dL—4(ρ=-1) merit:モデルに定式化の誤りの判定(DW≦R2)で有用 demerit:不決定区間の存在(n が小/k が大の時深刻)、定数項なしモデル(蓑谷 p-72)、ラグ付 き内生変数モデル(DW は 2 の方向にバイアスをもつ)、高階の自己相関モデルには不適用 (3) Durbin(1970,Econometrica)の asymptotic test テキスト p-963 (3-1)ラグ内生変数モデル(yt=xtβ+Σγpyt-p+ut, ut=ρut-1+εt,ε~N(0,σ2I) Ho:ρ=0 の検定においては yt-1 と ut に相関が生じ、ρはゼロ方向へのバイアスを持つため DW 値は使えない ①Durbin’s h= ˆ a n ~N(0,1), ˆ =1-DW/2 ˆ) 1 n var(γ ②1-n・var(γ)≦0 のときは漸近的に同等な補助回帰にもとづく Durbin’s m を推奨 et= xtδ+φyt-1+ρet-1+εt において H0:ρ=0 を t 検定する。 m検定はh検定よりも検定力の点で優れているので小標本では有用である (3-2)高階の自己相関モデル(ut=ρ1ut-1+ρ2ut-2+…+ρput-p+εt):Durbin’s alternative H0:ρ1=…=ρp=0 を検定するため、補助回帰での F=(ESS/p)/(RSS/(n-p))を計算し、 a pF~χ2(p)(∵ lim n1 F ( n1 , n2 ) n 2 2 (n1 ) )にもとづき検定を行なう (4) Breusch(1978)-Godfrey(1978,ECMT) LM test: AR(p), MA(p)への拡張 テキスト p-962 最尤推定量のもとでの score 検定 see 蓑谷(1996) p-77 εt=ρ1εt-1+ρ2εt-2+…+ρpεt-p+vt で H0:ρ1=…=ρp を検定。OLS残差 et の補助回帰 et=a+bxt+cyt-1+d1et-1+d2et-2+…+dpet-p の R2 を用いて検定をおこなう。 21 Advanced Econometrics (Hiroki Kawai) 2014 spring a LM=ESS/(RSS/n)=nR2~χ2(p) 説明変数にラグ付き内生変数が入っても可な一般的なテスト 発想は異なるが Durbin’s alternative とこの LM テストは漸近的に同等となる (5) Box-Pierce(1970,J American Stat Assoc.)と Ljung(1978,Biometrica)の Q test AR(p)や MA(p)での検定に用いる(ラグつき内生変数モデルでは利用できない) ~χ (p)、小標本の補正 Q’= n( n 2) OLS 残差 et のもとで定義される r j Q= n p 2 j 1 j r n ee t j 1 t t j n 2 t 1 t p e より 2 j 1 j 2 AR(p) DW test × Durbin's h × Durbin's m × Durbin’s alternative ○ Q test ○ LM test ○ ラグ内生 × ○ ○ × × ○ p-962 r (n j ) ~χ2(p) 小標本 △ △ ○ △ △ △ 2.5 対処1:Heteroscedasticity Consistent Standard Error (HCSE) 「robustness to unknown heteroschedasticity / autocorrelation」 (1)White’s heteroscedasticity consistent estimator p-313 var(bOLS)=(X’X)-1X’V’X(X’X)-1 を Vˆ =diag{e12/d1,…,en2/dn}で評価。White(1980,ECMT)はこ れが var(b)の一致推定量となり、さらにこの HCSE で定義される t 値が正規分布で近似で きることを示した(ラフな証明は p-163)。その後の Davidson & MacKinnon(1993)では小標 本 で も 耐 え う る 調 整 が 推 奨 さ れ て い る 。 di=1(HC0), di=(n-k)/n(HC1, 自 由 度 修 正 ), di=1-hii(HC2, 標準(Student)化された残差), di=(1-hii)2(HC3), H=X(X’X)-1X’ e=My, M=I-X(X’X)-1X’, MX=0, Me=e Homoschedasticity のもとでは E(e’e)=E(MuuM)=σ2M E(et2)=σ2(1-xt(X’X)-1xt)<σ2 最小2乗残差ではσ2 を過小推定してしまう! (2) Newey-West Heteroskedasticity and Autocorrelation Consistent Standard Error see Newey&West(ECMT, 1987), Hamilton p-220, Greene p-959 var(bOLS)=(X’X)-1X’VX(X’X)-1←(X’X)-1Q(X’X)-1 →正規検定 Q= T1 e 2 x x l 1 pp11 l ( T1 t l 1 et et l xt xtl T1 t l 1 et et l xt l xt ) t 1 t t t T p T T 系列相関がない場合は White の SCSE と同しになる ラグ期間 p の決定: p=Ta<T,0<a<1/4 が基準とされるが、G=3 で十分:Andrew(91,ECMT) 2.6 対処 2:Generalized Least Square (1) Weighted LSE としての解釈 → BLUE(Aitken’s Theorem p-305, 317) Positive definite 行列がΩ-1=P’P のように分解できるとき y=Xβ+ε→Py=PXβ+Pε→y*=X*β+ε* E(ε*)=0、Var(ε*)=E(Pεε’P’)=σ2PΩP’=σ2PP-1(P’)-1P’=σ2I このモデルの下での OLSE、bGLS=(X*’X*)-1X*’y* =(X’P’PX)-1X’P’Py=(X’V-1X)-1X’V-1y は BLUE となる。bGLS の分散共分散行列は Var(bGLS)=σ2(X*’X*)-1=σ2(X’Ω-1X)-1、だが、 σ2 の不偏推定量は s2=(y-XbGLS)’Ω-1(y-XbGLS)/(n-K)で得られる。 例えばΩ=diag(w1,…,wn)のとき P=diag{.. 1 wi ..} (2)MLE としての解釈 → 一致性、漸近的有効性、漸近的正規性 22 p-592 Advanced Econometrics (Hiroki Kawai) 2014 spring y=Xβ+ε, ε~N(0,σ2Ω)→f(ε)=(2π)-n/2|σ2Ω|-1/2exp{- 12 ε’(σ2Ω)-1ε}より 1 -1 (∵|σ2Ω|=σ2n|Ω|) lnL=- n2 ln(2π)- n2 lnσ2- 12 ln|Ω|- 2σ 2 ( y-Xβ)’Ω (y-Xβ) lnLβ= σ12 ( X’Ω-1y-X’Ω-1Xβ)=0→bML=(X’Ω-1X)-1X’Ω-1y n n (y-Xβ)’Ω-1(y-Xβ)=0→σ2ML=(y-XbML)’Ω-1(y-XbML)/n lnLσ2=- 2σ 2 + 2σ4 1 1 bGLS=(X’ V X)-1X’ V y=(X’Ω-1X)-1X’Ω-1y 1 Var(bGLS)=(X’ V X)-1=σ2(X’Ω-1X)-1 (3)Feasible GLS:加重最小二乗法(Weighted Least Squares) p-307 yi=α+βxi+εi→(yi/σi)=α(1/σi)+β(xi/σi)+(εi/σi)→minΣ(ei/σi)2 A.σi2 が既知(例えば、平均化データ):WLS→BLUE B.σi2 が未知: Feasible GLS(two-step estimator)→漸近的に GLS と同じになる P (証明は Ruud p-437)MLE(=GLS)←LMLE=FGLS ① OLSE より ei ②σi2= ei2=σ2・exp(Ziγ) ③この fitted value を weight にして WLS ※新しい b を用いて 1)2)3)を収束するまで繰り返す場合もある(漸近的には同等なので△) 一般に GLS は OLS より efficient であるが、小標本の場合は必ずしも成立しない (4) Feasible GLS: 準階差変換(Cochrane=Orcutt 法→Prais-Winsten 変換) p-966 min S(α,β,ρ)=Σt=2,…,T{(Yt-ρYt-1)-α(1-ρ)-b(Xt-ρXt-1)}2+(1-ρ)(Y1-α-βX1)2 1)OLS で et 2)et=ρet-1+εt で ˆ 3) Prais-Winsten 変換(Y’t=Yt-ρYt-1, X’t=Xt-ρXt-1, Y’1=(1-ρ2)1/2Y1, X’1=(1-ρ2)1/2X1 4) Y’t=α(1-ρ)+βX’t+εt を推定 ・ ˆ を用いるため推定される a,b は BLUE とはならないが(不偏性さえも満たさない)、大標 本では OLSE よりも有効な推定量となる(X が非定常時系列の場合は成立しない) ・p次自己相関モデルでは yt*=Pyt=yt-ρ1yt-1-ρ2yt-2…のような変換を行なう (5) MLE:consistent & asy. Efficient l=- n2 ln(2π)- 12 ln|V|- 12 ε’V-1ε,|V|= (1-ρ2)-1, ε’V-1ε=(ε’ε)/ ,u=Pε=P(y-Xβ) 2n 2 =- n2 ln(2π)- n2 ln( )+ 12 ln(1-ρ2)-u’u/(2 ) 2 2 lρ=lβ=lσ2=0 の非線形問題を数値的に解くことになる。MLE では FGLS で無視されてい る第3項が入っているので、若干の差が生じる Monte Carlo 実験によると小標本でρが小さい場合は OLS の方が良い結果(Ruudp-603) ※2 step estimator の一致性・有効性 (1)Linearized MLE(LMLE) Rothenberg & Leender(1964) Econometrica 32(1-2):57-76 lnL(θ)≒lnL(θo)+[ ln L(θ o ) ln L(θ o ) 1 ]’(θ-θo)+ (θ-θo)’[ ] (θ-θo) θ 2 θθ MLE の1階の条件の期待値 E{g(θ)}=E{g(θo)}+E{H(θo)}(θ-θo)=0 ~ ~ ~ MLE の解 ˆ =θo+{ -E[H(θo)] }-1E{g(θo)}= +{I( )}-1E{g( )} P LMLE も consistent & asymptotically efficient である LMLE→MLE(Ruud p-339) (2)LMLE としての 2 step estimator 1 ~ ~ ~ 1 ~ ~ X ' ˆ ~ X 1 X 0 ( y X ) ( X ' 1 X ) 1 X ' 1 y 1 ' ~ 2 ~ ~ ~ 2 ~ ~ ' ~ 2 ~ ( Z ' 1 Z * ) 1 Z *' 2 w * * 2 Z * Z * 2 Z * {w h( Z )]} ˆ 0 ~ ~ ~ w* w h( Z ) Z * 、 Z * h( Z ) | ~ 23
© Copyright 2024 ExpyDoc