- こちらで情報による意見の変化について考えた
- 世の中では、複数の候補者からの選出、というイベントがなされている。だれか1人の候補者が過半数を取ると決定する仕組みで、全候補者への投票ができる段階から、候補者の数が変更されていく。単純に上位2名の決選にすることもできるし、次第に候補者を絞っていくこともできるだろう
- どちらも何かしらのきっかけで、「候補〜仮説」の尤度が変化する話
- 前者は、比較的小さい自然数に関して事前確率を考えた後、候補となる自然数に制約が入ったとして、事前確率をどのように変化するか、の話
- 簡単なところから始めよう
- 投票
- 複数の候補者がいて、たくさんの選挙権者がいるとする
- 選挙権者は候補者に対して、投票したい順序がある
- 選挙権者は自分が最も投票したい候補者に投票する
- 過半数の得票を取れば、確定、そうでなければ、以下の手順で候補者を絞ることにする
- 1回、投票が行われるごとに、最下位の候補者は除外される
- 候補者が減ると、その候補者を選んでいた選挙権者だけは、投票先を変更する。このときの変更行動は偏りが出る。
- Rでやってみよう
Nv <- 10001
Nc <- 10
N.op <- 30
op.list <- list()
for(i in 1:N.op){
op.list[[i]] <- sample(1:Nc)
}
library(MCMCpack)
op.prob <- rdirichlet(1,rep(1,N.op))
Opinions <- matrix(0,Nv,Nc)
for(i in 1:Nv){
Opinions[i,] <- op.list[[sample(1:N.op,1,prob = op.prob)]]
}
loop <- TRUE
list.c <- 1:Nc
log <- NULL
while(loop){
print("candidates")
print(list.c)
votes <- t(apply(Opinions[,list.c],1,order))[,length(list.c)]
res <- tabulate(votes,length(list.c))
print("result")
print(res)
tmp <- rep(0,Nc)
tmp[list.c] <- res
log <- rbind(log, tmp)
if(max(res) > sum(res)/2){
loop <- FALSE
selected <- list.c[which(res == max(res))]
}else{
tobe.deleted <- which(res == min(res))
tobe.deleted.2 <- sample(tobe.deleted,1)
list.c <- list.c[-tobe.deleted.2]
if(length(list.c) == 1){
loop <- FALSE
selected <- list.c
}
}
}
print(selected)
matplot(log,type="l")