本文の図を描くプログラム

###### 本文の図を描くプログラム

###### β0.91 2017/06/15

###### 図1のプロットのための関数

plot.fig1=function(){

range=3.5

add.lines=function(z){lines(c(1:(tmax-1)),z[2:tmax],col=1)}

windows(); par(mfrow=c(2,2))

plot(0,xlim=c(1,(tmax-1)),ylim=c(-range,range),type="n",xlab="",ylab="")

points(dat$x,dat$y,pch=19,col=grey(0.5))

lines(c(1:(tmax-1)),dat$ytrue,col=1,lwd=1,lty=1)

plot(0,xlim=c(1,(tmax-1)),ylim=c(-range,range),type="n",xlab="",ylab="")

points(dat$x,dat$y,pch=19,col=grey(0.5))

apply(x[1:5,],1,add.lines)

}

###### 図2,図3のプロットのための関数

plot.fig23=function(){

range=3.5

add.lines=function(z){lines(c(1:(tmax-1)),z[2:tmax],col=1)}

windows(); par(mfrow=c(2,2))

plot(0,xlim=c(1,(tmax-1)),ylim=c(-range,range),type="n",xlab="",ylab="")

points(dat$x,dat$y,pch=19,col=grey(0.5))

apply(x[1:5,],1,add.lines)

plot(0,xlim=c(1,(tmax-1)),ylim=c(-range,range),type="n",xlab="",ylab="")

lines(c(1:(tmax-1)),apply(x[,2:tmax],2,"median"),col=gray(0.5),lwd=3)

}

#---------------------------------------------------------

###### データを読む&パラメータを設定する

dat=read.table("testdata.txt")

tmax=length(dat$x)+1

nmax=5000

sd.ini=1.0; sd.sys=0.15; sd.obs=0.2

sc.sys=0.04

###### 図1を描く

set.seed(1985)

x=matrix(0,nmax,tmax)

x[,1]=rnorm(nmax,sd=sd.ini)

for (t in 1:(tmax-1)){

x[,t+1]=x[,t]+rnorm(nmax,sd=sd.sys)

## weight=exp(-(x[,t+1]-dat$y[t])^2/(2*sd.obs^2))

## x[,t+1]=sample(x[,t+1],prob=weight,replace=TRUE)

}

plot.fig1()

###### 図2を描く

set.seed(1985)

x=matrix(0,nmax,tmax)

x[,1]=rnorm(nmax,sd=sd.ini)

for (t in 1:(tmax-1)){

x[,t+1]=x[,t]+rnorm(nmax,sd=sd.sys)

weight=exp(-(x[,t+1]-dat$y[t])^2/(2*sd.obs^2))

x[,t+1]=sample(x[,t+1],prob=weight,replace=TRUE)

}

plot.fig23()

###### 図3を描く

set.seed(1985)

x=matrix(0,nmax,tmax)

x[,1]=rnorm(nmax,sd=sd.ini)

for (t in 1:(tmax-1)){

x[,t+1]=x[,t]+rcauchy(nmax,scale=sc.sys)

weight=exp(-(x[,t+1]-dat$y[t])^2/(2*sd.obs^2))

x[,t+1]=sample(x[,t+1],prob=weight,replace=TRUE)

}

plot.fig23()