# パッケージがインストール済なら次の行は不要
# import Pkg; Pkg.add(["Statistics","Distributions"])
using Statistics, Distributions
import Random  # 乱数を扱うためのモジュールをインポート
n = 100000  # 試行回数
Random.seed!(1)  # 乱数のシード値を固定
X = rand(Multinomial(10, fill(1/6, 6)), n)  # 多項分布に従う乱数
X1 = X[1, :]  # 1の目が出る回数
X2 = X[2, :]  # 2の目が出る回数
Y = X[1, :] + X[3, :] + X[5, :]  # 奇数の目が出る回数
Z = X[2, :] + X[4, :] + X[6, :]  # 偶数の目が出る回数
# 期待値E(X1+X2^2)を表示
println(mean(X1 + X2 .* X2))  # モンテカルロ法
println(35/6)  # 参考：理論値
# 相関係数ρ(X1,X2)を表示
println(cor(X1, X2))  # モンテカルロ法
println(-1/5)  # 参考：理論値
# 相関係数ρ(X1,Y)を表示
println(cor(X1, Y))  # モンテカルロ法
println(sqrt(5)/5)  # 参考：理論値
# 相関係数ρ(X2,Y)を表示
println(cor(X2, Y))  # モンテカルロ法
println(-sqrt(5)/5)  # 参考：理論値
# 相関係数ρ(Y,Z)を表示
println(cor(Y, Z))  # モンテカルロ法
println(-1)  # 参考：理論値
# 確率P(X2=1,Y=3)を表示
println(mean((X2 .== 1) .& (Y .== 3)))  # モンテカルロ法
println(35/1458)  # 参考：理論値
