Sさんは桜並木を散歩しています。桜並木には普通の桜に混じって時々八重桜が咲いていて、八重桜が1本観察されるまでに歩いた距離を10回記録すると、
189.9
71.3
243.1
94.1
204.9
122.0
163.0
467.1
41.8
36.4
となりました(単位はメートル)。八重桜が1本観察されるまでに歩いた距離が指数分布に従うとすると、八重桜は平均的に何mおきに生えているでしょうか。また、これから100m歩く間に八重桜を1本以上見る確率はどれくらいでしょうか。そして、その確率が50%より高い確率はどれくらいでしょうか。
コードはこちらになります。
# -*- coding: utf-8 -*- import pandas as pd import numpy as np import pystan def get_data(): x = np.array(pd.read_csv("ch0702.data", header=None)[0]) print(x) return { "n" : x.size, "x" : x } def get_code(): f = open("ch0702.stan") code = f.read() f.close() return code def main(): stan_data = get_data() stan_code = get_code() fit = pystan.stan(model_code=stan_code, data=stan_data, iter=11000, warmup=1000, thin=1, chains=4) print(fit) fit.plot() if __name__ == "__main__": main()
データです。
189.9 71.3 243.1 94.1 204.9 122.0 163.0 467.1 41.8 36.4
Stanのコードです。
data { int<lower=0> n; real<lower=0> x[n]; } parameters { real<lower=0> lambda; } model { x ~ exponential(lambda); } generated quantities { real mu; real<lower=0, upper=1> p100; real<lower=0, upper=1> p100_over50; mu <- inv(lambda); p100 <- exponential_cdf(100, lambda); p100_over50 <- step(p100 - .5); }
出力結果になります。
mean se_mean sd 2.5% 25% 50% 75% 97.5% n_eff Rhat lambda 6.7e-3 1.0e-5 2.0e-3 3.4e-3 5.3e-3 6.5e-3 7.9e-3 0.01 40000 1.0 mu 163.39 0.27 54.04 89.25 126.1 152.92 189.47 296.69 40000 1.0 p100 0.48 5.0e-4 0.1 0.29 0.41 0.48 0.55 0.67 40000 1.0 p100_over50 0.42 2.5e-3 0.49 0.0 0.0 0.0 1.0 1.0 40000 1.0 lp__ -66.51 3.6e-3 0.71 -68.58 -66.67 -66.23 -66.06 -66.01 40000 1.0
muのEAP推定値から、八重桜は平均163.4mおきに生えていると言えます(確信区間は89.25mから296.69m)。100m歩く間に八重桜を1本以上見る確率(p100)は、48%となりました。ほぼ五分五分の確率です。その確率が50%を超える確率は42%です。