幾何ブラウン運動と見せかけの回帰

いつものようにメモがてら。
幾何ブラウン運動モンテカルロシミュレーションしたかったら以下のように書く。

#Term(year)
T  <- 5
#Number of path
N  <- 10000
#Unit of time
dt <- T / N
#Start price of stock or something obeying to geometric brownian motion
s0 <- 100
#montecarlo simulation(Average return 10%(per annual), Volatility 20%(per annual))
x <- s0 * exp(cumsum(0.1 * dt + 0.2 * rnorm(N) * sqrt(dt)))
y <- s0 * exp(cumsum(0.1 * dt + 0.2 * rnorm(N) * sqrt(dt)))
#plot
matplot(cbind(x,y))

平均リターンとボラティリティ水準をチェック。
リターンは設定値(10%)との乖離がすごい一方Volatilityは比較的安定。

> #check average return and volatility
> (y[length(y)] / y[1]) ^ (1 / T) - 1 
[1] 0.1562153
> (x[length(x)] / x[1]) ^ (1 / T) - 1 
[1] 0.3392794
> sd(y[-1]/y[-length(y)]-1) * sqrt(1 / dt)
[1] 0.1998597
> sd(x[-1]/x[-length(x)]-1) * sqrt(1 / dt)
[1] 0.2001122


このxとy(≒株価)をそのまま回帰分析してるような例をネット、場合によっては書物でも見かけるんだけど、
それをやると見せかけの回帰が起こるのでやってはいけない
上で創ったxとyは全く別物の乱数から生成しているが回帰してみると・・・

> summary(lm(y~x))

Call:
lm(formula = y ~ x)

Residuals:
    Min      1Q  Median      3Q     Max 
-32.631 -10.776  -1.824   9.301  67.620 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 1.092e+02  4.272e-01  255.67   <2e-16 ***
x           1.011e-01  1.595e-03   63.41   <2e-16 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 17.17 on 9998 degrees of freedom
Multiple R-squared: 0.2868,	Adjusted R-squared: 0.2867 
F-statistic:  4020 on 1 and 9998 DF,  p-value: < 2.2e-16 

こんな感じで回帰係数が有意になってしまう。やるならリターンベース(株価の差分・増分)に倒してからやること。