Variance d'une marche aléatoire 2D
définissons une marche aléatoire 2D par
$$ \sum_i A_i X_i $$
où$A=[\cos(\theta)\ \sin(\theta)]^T$,$\theta$est une variable aléatoire dans l'intervalle$[0,2\pi]$et$X$est une variable aléatoire scalaire entre$[-1,1]$.$\theta$et$X$ont une distribution uniforme et sont indépendants.
La marche aléatoire peut être divisée en deux marches aléatoires dans$x$et$y$. Alors, on aboutit à deux variances$\sigma_x^2$et$\sigma_y^2$. Comment pouvons-nous calculer la variance de la marche 2D basée sur$\sigma_x$et$\sigma_y$? Peut-être$\sqrt{\sigma_x ^2 + \sigma_y ^2}$?
Si on calcule la variance du vecteur$A$, on aboutit à un$2 \times 2$matrice de covariance. Je suppose que cela se terminerait par un résultat identique. Mais comment?
Réponses
Une réalisation de cette promenade est montrée à gauche. Les couleurs des points progressent du rouge au bleu au fil du temps. Des segments de ligne courts relient des points successifs pour rendre la progression plus visible.
Pour déterminer ses moments, écrivez
$$AX = (x, y)^\prime.$$
Car$\theta$est uniforme, la distribution du vecteur$AX$est identique à la distribution du vecteur$-AX = (\cos(\theta+\pi),\sin(\theta+\pi))^\prime X,$d'où
$$E[(x,y)] = E[AX^\prime] = (0,0).$$
Car$\theta$a la même distribution que$\pi/2 - \theta$modulo$2\pi,$
$$(y,x)= (\sin(\theta),\cos(\theta))X = (\cos(\pi/2-\theta), \sin(\pi/2-\theta)X \sim (x,y)$$
sont équirépartis, d'où$x$et$y$ont le même écart$\sigma^2.$Mais
$$2\sigma^2 = E[x^2+y^2] = E[||AX||^2] = E[||A||^2 |X|^2] = E[|X|^2] = \int_{-1}^1 x^2 \left(\frac{1}{2}\,\mathrm{d}x\right) = \frac{1}{3}$$
nous montre que
$$\sigma^2 = 1/6.$$
Dans la marche aléatoire, la somme de$n$iid$x_i$aura donc des attentes$0$et variance$n/6$et de même pour le$y_i.$Le panneau du milieu de la figure trace les variances de$x_i$et$y_i,$ $i=1,2,\ldots, 100$pour$10^4$promenades simulées. La ligne rouge a une pente$1/6.$
Des arguments de symétrie similaires montrent facilement la covariance de$x$et$y$est zéro. (La distribution de$(x,y)$est la même que la distribution de$(-x,y)$et cela implique immédiatement que la covariance est égale à son propre négatif. Depuis$x$et$y$sont bornés, ils ont des covariances finies, d'où ils doivent être égaux à zéro.)
Le panneau de droite de la figure représente les coefficients de corrélation observés dans ces$10^4$marches simulées, confirmant qu'elles tendent à être nulles.
Une façon d'en avoir l'intuition est de tracer les points d'arrivée pour un grand nombre de marches aléatoires après$n$pas. Les voici pour les mêmes 10 000 marches simulées résumées dans la première série de chiffres :
La valeur$\sqrt{n\sigma^2 + n\sigma^2} = \sqrt{n/3}$est la distance typique parcourue depuis l'origine. Les rayons des cercles rouges sur la figure sont définis sur ces valeurs à titre de référence. La covariance nulle reflète la symétrie circulaire : il n'y a pas de corrélation évidente dans ces nuages de points.
Voici le Rcode pour la simulation et les chiffres.
#
# Generate a random walk of length `n`.
#
rWalk <- function(n) {
theta <- runif(n)
X <- runif(n, -1, 1)
x <- cos(2 * pi * theta)
y <- sin(2 * pi * theta)
cbind(cumsum(x*X), cumsum(y*X))
}
set.seed(17)
n <- 1e3
walk <- rWalk(n) # One realization
#
# The figures.
#
par(mfrow=c(1,3))
plot(walk, type="l", asp=1, xlab="x", ylab="y", main="One Realization")
points(walk, pch=19, cex=0.5, col=hsv(3/4 * seq_len(n)/n, .8, .8, .5))
#
# The simulation.
#
n <- 1e2
X <- replicate(1e4, rWalk(n))
#
# Compute the covariance matrices for each time.
#
Sigma <- array(apply(X, 1, function(y) cov(t(y))), c(2,2,dim(X)[1]))
#
# Plot the variances and correlations.
#
plot(Sigma[1,1,], ylab="Variance", main="Variance")
points(Sigma[2,2,], pch=2)
abline(c(0,1/6), col="Red", lwd=2)
plot(Sigma[1,2,] / sqrt(Sigma[1,1,] * Sigma[2,2,]), ylim=c(-1,1),
ylab=expression(rho), main="Correlation")
abline(h=0, col="Red", lwd=2)
par(mfrow=c(1,1))
#
# Plot a set of simulated endpoints.
#
lim <- max(abs(X))
a <- sapply(c(cos, sin), function(f) f(seq(0, 2*pi, length.out=361)))
par(mfrow=c(1,3))
for (k in c(1,floor(sqrt(n)), n)) {
plot(t(X[k,,]), xlim=c(-1,1)*lim, ylim=c(-1,1)*lim, asp=1,
xlab="x", ylab="y",
main=paste("After Step", k),
pch=19, cex=0.5, col="#00000010")
lines(a * sqrt(k/3), col="Red")
}
par(mfrow=c(1,1))