量的データで決断

  • 帰結が2種類あるときのオプション選択のことを考えた(こちらとか)
  • 帰結が3以上種類あるときのオプション選択のことを考えた(こちらとか)
  • 自然な流れとして、量的帰結についてのオプション選択を考えたい
  • 帰結の分布を観測データからオプション別に思い描いて、その分布に対して評価を下したい
  • まずは、帰結分布を描くことにする
  • カテゴリカルな帰結の場合は、共役事前分布であるベータ分布・ディリクレ分布を用いた
  • 量的な場合には、ガウシアンでの密度推定がよいだろう
    • 密度推定するには、平滑化をコントロールする必要があるが、それについては、リスク関数の最小化など、よく使うもの(Rのdensity()関数でのデフォルト)を決め打ちにしてみることにする

  • 書き散らしソース
true.prob <- list()
true.prob[[1]] <- matrix(c(1,1,0.1,10,2,0.9),byrow=TRUE,ncol=3)
true.prob[[2]] <- matrix(c(2,1,1),byrow=TRUE,ncol=3)

n.iter <- 1000
N <- 100
history.option <- rep(NA,n.iter)
history.value <- rep(NA,n.iter)

for(i in 1:n.iter){
	yamikumo <- FALSE
	if(i ==1 ){
		yamikumo <- TRUE
	}else{
		if(length(which(history.option[1:(i-1)]==1)) < 2 || length(which(history.option[1:(i-1)]==2)) <2){
			yamikumo <- TRUE
		}
	}
	if(yamikumo){
		s <- sample(1:2,1)
		history.option[i] <- s
		tmp.row <- sample(1:length(true.prob[[s]][,1]),1,prob=true.prob[[s]][,3])
		history.value[i] <- rnorm(1,true.prob[[s]][tmp.row,1],true.prob[[s]][tmp.row,2])
	}else{
		ones <- which(history.option ==1)
		twos <- which(history.option ==2)
		fr <- min(history.value[1:(i-1)])
		to <- max(history.value[1:(i-1)])
		fr2 <- fr-(to-fr)/2
		to2 <- to+(to-fr)/2
		d1 <- density(history.value[ones],from = fr2,to = to2)
		d2 <- density(history.value[twos],from = fr2,to = to2)
		ylim <- c(0,max(d1$y,d2$y))
		par(mfcol=c(1,1))
		plot(d1,ylim = ylim)
		par(new=TRUE)
		plot(d2,col=2,ylim=ylim)
		R1 <- sample(ones,N,replace=TRUE)
		R2 <- sample(twos,N,replace=TRUE)
		r1 <- rep(NA,N)
		r2 <- rep(NA,N)
		for(j in 1:N){
			r1[j] <- rnorm(1,history.value[R1[j]],d1$bw)
			r2[j] <- rnorm(1,history.value[R2[j]],d2$bw)
		}
		p <- length(which(r1>r2))/N
		if(runif(1)<p){
			s <- 1
		}else{
			s <- 2
		}
		history.option[i] <- s
		tmp.row <- sample(1:length(true.prob[[s]][,1]),1,prob=true.prob[[s]][,3])
		history.value[i] <- rnorm(1,true.prob[[s]][tmp.row,1],true.prob[[s]][tmp.row,2])

	}
	
}

plot(history.value, col = history.option)