武藤?
https://www.kumamoto-u.ac.jp/daigakujouhou/kouhou/kouhoushi/kumadainow/labo/2019/20200108
Adaptive Bayes推定 (内田, 吉田., 2014)
パラメータ推定
library("yuima")
# 時系列データの読み込み
data <- read.csv("C:/Users/xxx/Desktop/mi.u-tokyo.ac.jp_consortium2_data_maxtemp.csv")
# 当てはめる確率微分方程式
mod <- setModel(drift = "(2-theta2 * x)", diffusion = "(1+x^2)^theta1", state.variable="x", time.variable="t", solve.variable="x")
my.yuima <- setYuima(data=setData(data), model=mod)
param.init <- list(theta2 = 0.5, theta1 = 0.5)
mle <- qmle(my.yuima, start=param.init)
# QMLE推定結果
summary(mle)
出力
Quasi-Maximum likelihood estimation
Call:
qmle(yuima = my.yuima, start = param.init)
Coefficients:
Estimate Std. Error
theta1 0.3606014 0.01315033
theta2 0.1059911 0.02039105
-2 log L: 2983.879
対数尤度が低すぎて当てはまりは良くない?
推定パラメータで逆プロット
n<-486 ysamp <- setSampling(Terminal=1, n=n) t.yuima <- setYuima(model = ymodel, sampling = ysamp) set.seed(123) t.yuima <- simulate(t.yuima, xinit=10.4, true.parameter=list(theta1=0.3606014, theta2=0.1059911)) plot(t.yuima)
ベイズ推定
data <- read.csv("C:/Users/xxx/Desktop/mi.u-tokyo.ac.jp_consortium2_data_maxtemp.csv")
# 想定する確率微分方程式
mod <- setModel(drift = "theta1*x", diffusion = "theta2*x", state.variable="x",
time.variable="t", solve.variable="x")
yuima1 <- setYuima(data=setData(data), model=mod)
# 事前分布の設定(dunif=一様分布, dnorm=正規分布など)
prior <- list(theta1 = list(measure.type = "code", df = "dunif(theta1,0,1)"), theta2 = list(measure.type = "code", df = "dunif(theta2,0,1)"))
set.seed(123)
bayes1 <- adaBayes(yuima1, start=list(theta1=0.5, theta2=0.5), prior = prior, method="mcmc",mcmc=50000)
出力
vcov[1:nm, 1:nm] でエラー: 添え字が許される範囲外です
数値的にパラメータ推定をする場合、ドリフト項・拡散項は具体的な関数である必要
SIRモデル=ドリフト項、拡散項にWiener増分をつけるやり方はどうか?
実時系列データをそのままP(t)として使う→オプショングラフに適用できるかどうか?
幾何ブラウン運動プログラム