酔歩か酔歩じゃないか

  • 酔歩は進行方向をランダムに変える
  • 酔歩の軌道は、軌道上のあらゆる点で進行方向がランダムに変わる
  • 結果として、軌道上の3点が作る2つの連続する進行方向のなす角が0 - 2\piの間で一様分布する。そしてそれは、3点間の距離が極小でもそうだし、任意の有限長でもそうなる
  • あるルールに沿った動きは、進行方向の変化にルールがある
  • あるルールに沿った動きがありながら、その観察に乱雑項が入ると、観察データ上は進行方向がランダムに変わっているように見えるが、それは乱雑項がルールに沿った動きを凌駕している小距離間のみでの話であって、乱雑項より大きい移動に着目すると進行方向はランダムとはならない
  • ちょっと設定は違うが、一定速度で進むことを原則にしつつ、酔歩する場合と、一定速度で進んでいるのだが観察に乱雑項が入る場合を比べると、軌道を同じにするためには、酔歩的乱雑さと観察における乱雑項の大きさは、分散を二乗・平方根にするという関係にある
  • したがって、「ルールはあるがそこに酔歩の要素もある」というときの軌道と「ルールのある軌道に観察乱雑項がある」というときの軌道は観察データ上は乱雑項の分散の大小の違いに吸収されて、どちらの場合も「ルール」について観察から読み取る作業は同じになる
# 道があって観察に乱雑項があるのと
# 傾向がある酔歩とでは乱雑項の分散が平方根の関係
n.t <- 10000
V <- 0.5
x <- rnorm(n.t,1,sqrt(V))
X <- cumsum(x)
plot(X,type="l")

diff.X <- diff(X)
loc <- (X[1:(length(X)-1)] + X[2:length(X)])/2

plot(loc,diff.X)
summary(diff.X)
var(diff.X)
plot(X)


y <- 1:n.t + rnorm(n.t,0,V)
Y <- y[1:(n.t-1)]
diff.Y <- diff(Y)
locY <- (Y[1:(length(Y)-1)] + Y[2:length(Y)])/2

plot(locY,diff.Y)
summary(diff.Y)
var(diff.Y)
plot(Y)
  • さて。
  • ルールに沿っている曲線を観察したら、「ルールはある」が「観察に乱雑項」が入っている場合を考える
  • 観察の乱雑項のせいで、小範囲に限ると、いたるところで進行方向がランダムに変化してみえる
  • しかしながら、乱雑項の大きさを凌駕して進行方向の変化を評価するとそのランダム性は消える
  • 二次元平面の酔歩とルールのある軌道に観察乱雑項を入れた場合とで、その具合を見てみる
  • 確かに、二次元酔歩では、進行方向の変化を短区間・長区間と変えても、ランダムに変わるのに対して、ルールがある場合は、隣接3点で評価するとほぼランダムに方向を変えるが、長区間にすると、方向変化はごく小さくなる(方向変化を、隣接する方向2ベクトルのなす角の分布で評価すれば、角の分布が一様から0付近への集中に変わっていく)
n <- 1000

t <-seq(from=0,to=1,length=n)*10
d <- 2
X <- matrix(rnorm(d*n,0,1),ncol=d)
X <- apply(X,2,cumsum)
#X <- matrix(c(exp(t*0.1)*sin(t),exp(t*0.1)*cos(t)),ncol=d) + rnorm(d*n,0,0.01)
plot(X)
#X <- apply(X,2,diff)
nx <- length(X[,1])
k <- 1:100
par(ask=TRUE)
par(mfcol=c(1,2))
for(i in 1:length(k)){
	steps1 <- seq(from=1,to=n,by=k[i])
	steps2 <- seq(from=(1+k[i]),to=n,by=k[i])
	steps1 <- steps1[1:length(steps2)]
	
	Xst <- matrix(X[steps1,],ncol=d)
	Xend <- matrix(X[steps2,],ncol=d)
	kstep.V <- Xend-Xst
	#diff.kstep.V <- apply(kstep.V ,2,diff)
	tmp.n <- length(kstep.V[,1])
	pre.V <- matrix(kstep.V[1:(tmp.n-1),],ncol=d)
	post.V <- matrix(kstep.V[2:tmp.n,],ncol=d)
	R1 <- sqrt(apply(pre.V^2,1,sum))
	R2 <- sqrt(apply(post.V^2,1,sum))
	Y <- matrix(pre.V * post.V,ncol=d)
	Z <- acos(apply(Y,1,sum)/(R1*R2))
	plot(sort(Z))


hist(Z)
var(Z)

}
par(mfcol=c(1,1))

X <- matrix(c(exp(t*0.5)*sin(t*2),exp(t*0.1)*cos(t)),ncol=d) + rnorm(d*n,0,0.1)
plot(X)
#X <- apply(X,2,diff)
nx <- length(X[,1])
k <- 1:100
par(ask=TRUE)
par(mfcol=c(1,2))
for(i in 1:length(k)){
	steps1 <- seq(from=1,to=n,by=k[i])
	steps2 <- seq(from=(1+k[i]),to=n,by=k[i])
	steps1 <- steps1[1:length(steps2)]
	
	Xst <- matrix(X[steps1,],ncol=d)
	Xend <- matrix(X[steps2,],ncol=d)
	kstep.V <- Xend-Xst
	#diff.kstep.V <- apply(kstep.V ,2,diff)
	tmp.n <- length(kstep.V[,1])
	pre.V <- matrix(kstep.V[1:(tmp.n-1),],ncol=d)
	post.V <- matrix(kstep.V[2:tmp.n,],ncol=d)
	R1 <- sqrt(apply(pre.V^2,1,sum))
	R2 <- sqrt(apply(post.V^2,1,sum))
	Y <- matrix(pre.V * post.V,ncol=d)
	Z <- acos(apply(Y,1,sum)/(R1*R2))
	plot(sort(Z))


hist(Z)
var(Z)

}
par(mfcol=c(1,1))