複数軸の意見の集約

  • 選挙の頃
  • 反映したい母集団の意見は複数の軸で定義されている
  • 各軸を単純化して、賛成・反対とするだけで、軸数nに対して2^n通りの意見がある
  • 今、2^n通りの意見パターンごとに1つの「意見代表団体」があれば、その団体の得票数に比例して全体の意見を反映させれば、全項目の国民投票と同じ
  • もちろん、民主的代表性というのは、それのみを目指すものではないから、必ずしもそうなるのが最善とは言わないが、そうなる方が良い可能性が高い、とまでは言ってもよいだろう
  • さて、2^n個の団体がないとき、どのくらい、民意からずれるかを単純化してRで回してみよう
  • 「投票行動」はn項目に関する意見の賛否について、全項目を平等に扱い、一番近い団体に投票するものとしよう…
# シミュレーション回数
n.iter <- 10
# 争点の数
n <- 4
# 民意
library(MCMCpack)
q <- rdirichlet(1,rep(1,N))

# あるべき政党の数
N <- 2^n
# その意見
X <- expand.grid(rep(list(c(0,1)),n))

# 意見の近さ
D <- as.matrix(dist(X))

# 実際の政党数
ms <- 1:N
Rs <- rs <- list()
for(i in 1:length(ms)){
	Rs[[i]] <- rs[[i]] <- matrix(0,n.iter,n)
	for(j in 1:n.iter){
		# 実際の政党の数
		m <- ms[i]
		# 政党のリスト
		p<- sample(1:N,m)


		# 票数
		V <- rep(0,N)
		for(k in 1:N){
			closest <- which(D[k,p]==min(D[k,p]))
			V[p[closest]] <- V[p[closest]]+ q[p[closest]]/length(closest)
		}

		R <- X*V
		#print(R)
		Rs[[i]][j,] <- apply(R,2,sum)
		r <- X * c(q)
		#print(r)
		rs[[i]][j,] <- apply(r,2,sum)
	}
	

}
# 政党数を増やして、n軸の意見賛成割合がどう変わるかを見る
# 政党数が最大のときは、民意そのもの
mean.R <- lapply(Rs,apply,2,mean)
mean.r <- lapply(rs,apply,2,mean)
var.R <- lapply(Rs,apply,2,var)
var.r <- lapply(rs,apply,2,var)