In [1]:
include("preparation.jl");
include("bayes.jl");
include("simulation.jl");
Plotのmethodは以下。()内はmethod名。
simulation typeで実装し、methodでsimulationの結果に対する上記のplotを出せるようにしている。
引数の詳細はsimulation.jlの各methodの定義部分に記載
確認する点は以下
FAlph = Array(Float64, 2, 1)
# setting parameters
param[2] = -1
C0 = 0
# Raceの変更に伴い、Cxも4つの要素にする必要がある。
q = 4
Cx = param[1:q]
Cz = -abs(param[q+1:q+3])
FAlph[1,1] = abs(param[q+4])
FAlph[2,1] = abs(param[q+5])
param[q+4:q+5] = FAlph[1:2,1]
Sig_xsi = max(0.5, abs(param[q+6]))
param[q+6] = Sig_xsi
DeltaO = 0.6891
DeltaMO = 0.5366
# Raceをいじった関係でこのvkを4*4 = 16この要素にしなくちゃいけない
vk = param[12:27]
composite = param[75:149]
Tij = abs(param[150:260])
# new parameters
# rho_eta = abs(param[261])
rho_eta = 1
rho_chi = param[262:265]
mu_chi = param[266:269]
chi = param[270:273]
In [2]:
# パラメータセットとインスタンスの作成
m = simulation(rand(273))
# simulationを実行
v = simulate(m)
Out[2]:
In [5]:
# candcandの使用
# 第1引数がstate_number
# 第2引数がsimulated votehare
# どちらの引数も省略することが可能。
# 第1引数を省略するとすべての州についてのプロットを別々のファイルにして出力する。
# 第2引数を省略すると上のsimulate関数を実行してvote shareを糧に出してくれる。
candcand(m, 4, v)
In [6]:
# state_voteの使用
# vはsimulated vote share
# 省略可能。
# 省略したら勝手にsimulateしてvote shareを入れてくれる。
state_vote(m, v)
In [7]:
# demoの使用
# demographicの種類は省略不可能
# 第3引数はstate number。上と同様に省略可能
# 第4引数はsimulated vote share。上と同様に省略可能
demo(m, "race", 3, v)
In [9]:
# rate_histoの使用
rate_histo(m, v)
Out[9]:
In [11]:
# 乱数でパラメータを作る
srand(12345)
para1 = rand(273)
srand(12345)
para2 = rand(273);
# vk = param[12:27]がdemographic
# 一番左の候補者についてパラメータをいじる(clark)
para1[12:15] = para1[12:15]*5
# データシミュレーション
s1 = simulation(para1)
v1 = simulate(s1)
s2 = simulation(para2)
v2 = simulate(s2);
In [12]:
# clarkに投票したくなるはず
state_vote(s1, v1)
In [13]:
# 基準
state_vote(s2, v2)
In [14]:
# まずはCxをいじる
srand(12345)
para1 = rand(273)
srand(12345)
para2 = rand(273)
q = 4
para1[1:q] = para1[1:q]*5
para1[2] = -1
para2[2] = -1
s3 = simulation(para1)
v3 = simulate(s3)
s4 = simulation(para2)
v4 = simulate(s4);
In [15]:
# いかなくなるはず
state_vote(s3, v3)
In [16]:
# 基準
# 下に対しても基準
state_vote(s4, v4)
In [20]:
# Czをいじる
# Cz = -abs(param[q+1:q+3])
srand(12345)
para1 = rand(273)
q = 4
para1[q+1:q+3] = para1[q+1:q+3]*5
para1[2] = -1
s5 = simulation(para1)
v5 = simulate(s5);
In [21]:
# 下がるはず
# ほとんど影響しない?
state_vote(s5, v5)
In [22]:
v5 == v4
Out[22]:
In [12]:
# 候補者が4人いる州から一つ検証対象を抜き出す
# 以下で0になっている州が4人出ている州
for S in 1:size(Cand,1)
println(S);
println(sum(v[Cand[S, 14]:Cand[S, 15], :].==0.0));
end
In [35]:
# 良さげな州を選ぶ
# パラメータセット
srand(12345)
para1 = rand(273)
m = simulation(para1)
v = simulate(m)
candcand(m, 0, v)
S = 19が比較的良さそう
candidate1 : "clark"
candidate2 : "dean"
candidate3 : "edwards"
candidate4 : "kerry"
In [40]:
# 基準
A = 19
abs(para1[150:260])[Cand[A, 11]:Cand[A, 12],1]
candcand(m, A, v)
In [43]:
# Tijをいじる
srand(12345)
para2 = rand(273)
# candidate1 vs candidate2を大きくする
# 二重にindexを参照すると代入できないから気をつけてね
para2[149+Cand[A, 11], 1] = 0.9999
abs(para2[150:260])[Cand[A, 11]:Cand[A, 12],1]
Out[43]:
In [44]:
# パラメータをいじったのちの結果
# plotじゃあわかりにくい
m2 = simulation(para2)
v2 = simulate(m2)
candcand(m2, A, v2)
In [51]:
# 各候補のmunicipality別の変化
# 要するにdeanのみ上昇した。
v2[Cand[A, 14]:Cand[A, 15], :] - v[Cand[A, 14]:Cand[A, 15], :]
Out[51]:
「S = 19において、T_1_2を大きくすると、candidate2のみ得票率が上昇する」は正しい動きか?
→vstrを見る
In [52]:
println(Cand[A, 9])
println(Cand[A, 10])
なので
VSTR_s = ones(48, 4)
Composite = ones(size(X,1),1)*COMPOSITE'
VSTR_s[:,1] = T_s[1,1]*(VStr_s[:,1]-VStr_s[:,2])+T_s[2,1]*(VStr_s[:,1]-VStr_s[:,3])
+T_s[3,1]*(VStr_s[:,1]-VStr_s[:,4])+Composite[:,1]
VSTR_s[:,2] = T_s[1,1]*(VStr_s[:,2]-VStr_s[:,1])+T_s[4,1]*(VStr_s[:,2]-VStr_s[:,3])
+T_s[5,1]*(VStr_s[:,2]-VStr_s[:,4])+Composite[:,2]
VSTR_s[:,3] = T_s[2,1]*(VStr_s[:,3]-VStr_s[:,1])+T_s[4,1]*(VStr_s[:,3]-VStr_s[:,2])
+T_s[6,1]*(VStr_s[:,3]-VStr_s[:,4])+Composite[:,3]
VSTR_s[:,4] = T_s[3,1]*(VStr_s[:,4]-VStr_s[:,1])+T_s[5,1]*(VStr_s[:,4]-VStr_s[:,2])
+T_s[6,1]*(VStr_s[:,4]-VStr_s[:,3])+Composite[:,4]
今、T_s[1,1] = 0.9999と置いたので、VStr_s[:,1]-VStr_s[:,2]の向きを見ればいい。
vk = param[12:27]
VStr = X[:, 2:end]*[vk[1:4] vk[5:8] vk[9:12] vk[13:16]]
VStr_s = VStr
ただし、Xは州ごとのdemographic(48 ,5)
In [56]:
vk = para1[12:27]
VStr = X[:, 2:end]*[vk[1:4] vk[5:8] vk[9:12] vk[13:16]]
VStr_s = VStr
VStr_s[:,1]-VStr_s[:,2]
Out[56]:
以上より、VStr_s[:,1]-VStr_s[:,2] < 0なので、T_s[1,1]を大きくした時に、VSTR_s[:,2]が大きくなる。
これはdeanの得票率が上昇することを意味するので、意図した動きになっている。
In [ ]: