ここで、最初にデータをシミュレートした後、典型的なOLSアプローチを使用して、Rの調査を行っています。
N <- 1000
x <- 1:N
epsilon <- rnorm(N, 0, 1)
y <- x + epsilon
summary(lm(y ~ x))
##
## Call:
## lm(formula = y ~ x)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.9053 -0.6723 0.0116 0.6937 3.7880
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.0573955 0.0641910 0.894 0.371
## x 0.9999997 0.0001111 9000.996 <2e-16 ***
## ---
## Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
##
## Residual standard error: 1.014 on 998 degrees of freedom
## Multiple R-squared: 1, Adjusted R-squared: 1
## F-statistic: 8.102e+07 on 1 and 998 DF, p-value: < 2.2e-16
...ここでは、回帰パラメータとすべての1000データポイントについて非有益なプリオを使用して、等価なベイジアン回帰を示します。
library(R2jags)
cat('model {
for (i in 1:N){
y[i] ~ dnorm(y.hat[i], tau)
y.hat[i] <- a + b * x[i]
}
a ~ dnorm(0, .0001)
b ~ dnorm(0, .0001)
tau <- pow(sigma, -2)
sigma ~ dunif(0, 100)
}', file="test.jags")
test.data <- list(x=x,y=y,N=1000)
test.jags.out <- jags(model.file="test.jags", data=test.data,
parameters.to.save=c("a","b","tau","sigma"), n.chains=3, n.iter=10000)
test.jags.out$BUGSoutput$mean$a
## [1] 0.05842661
test.jags.out$BUGSoutput$sd$a
## [1] 0.06606705
test.jags.out$BUGSoutput$mean$b
## [1] 0.9999976
test.jags.out$BUGSoutput$sd$b
## [1] 0.0001122533
パラメータ推定値および標準誤差/標準偏差は、本質的に同等であることに注意してください。
ここでは、最初の500のデータポイントを使用して前任者を推定し、最後に500を使用して後任者を推定する別のベイジアン回帰があります。興味深いことに、推論はOLSの結果と似ていますが、それほど多くはありません。これは私には、前回のトレーニングに使用された500データ点が過去500回と同じくらい重視されていないことが疑わしくなります。
特に、500 + 500が最初の500と最後の500を別々に使用していると思われるため、1000のデータポイント(および非情報提供者)を使用しない理由は考えられません。 私はOLSと1000ポイントのベイジアン結果が500 + 500以上であると信じており、OLSはより簡単です。
ありがとうMatt! – Erin