setwd("C:/xxx")		#ƃfBNg̎w

mtopdata <- read.csv("mtopdata.csv")
mtopdata_lst <- list(T=nrow(mtopdata),Y=mtopdata$kouryo,sqGRP=mtopdata$sqrt_GRP,c=61)

stancode <- '
data {
	int T;				//f[^̎_
	real Y[T];			//ړIϐiuhlj
	real sqGRP[T];			//ϐiGRP̃[gj
	int c;				//ij[A̍ŏ̎_
}

parameters {
	real m[T];			//1_OɈˑĕωm
	real b[T];			//GRP̃[ǧW
	real<lower=0> s_e;		//ẙϑ̕W΍
	real<lower=0> s_rm;		//m̏ԕ̕W΍
	real<lower=0> s_rb;		//b̏ԕ̕W΍
}

model {
	for (t in 1:T) {
		Y[t] ~ normal(m[t]+b[t]*sqGRP[t], s_e);	//ޓx֐
		}
	for (t in 2:T) {
		m[t] ~ normal(m[t-1], s_rm);		//m̎Oz
		}
	for (t in 2:c-1) {
		b[t] ~ normal(b[t-1], s_rb);		//b̎Oziij[AO)
		}
	for (t in c+1:T) {
		b[t] ~ normal(b[t-1], s_rb);		//b̎Oziij[A)
		}
	m[1] ~ normal(0,100);				//m1_ڂ̎Oz
	b[1] ~ normal(0,10);				//b1_ڂ̎Oz
	b[c] ~ normal(0,10);				//b̏ij[A̍ŏ̎_̎Oz
	s_e ~ uniform(0,100);				//s_e̎Oz
	s_rm ~ uniform(0,100);				//s_rm̎Oz
	s_rb ~ uniform(0,10);				//s_rb̎Oz
}
'

library(rstan)
rstan_options(auto_write=TRUE)
options(mc.cores=parallel::detectCores())

stanmodel <- stan_model(model_code=stancode)

fit <- sampling(stanmodel, data=mtopdata_lst,
		init=function(){
			list(m=runif(nrow(mtopdata),0,100), b=runif(nrow(mtopdata),0,1),
			s_e=runif(1,0,10),s_rm=runif(1,0,10),s_rb=runif(1,0,0.1))
		},
		iter=20500, warmup=500, chains=4, seed=12345)

write.table(summary(fit)$summary,file="outputsummary.txt",sep="\t",quote=FALSE,col.names=NA)
traceplot(fit,pars=c("b[1]","s_rb"),inc_warmup=TRUE,window=c(1,500),nrow=2)

save(fit, file="mtop_fit.dat")
mcsample <- extract(fit,permuted=TRUE)
write.table(mcsample,file="mcsample.txt",sep="\t",quote=FALSE,col.names=NA)
