Rでモデルを立てる Rでシミュレーションする、Rで関数を作る

  • ここで言うモデルとは、『AだったらBになる』ということを意味する
  • 『Aだったら』は、1個以上の条件のセット、『Bになる』は、1個以上の結果のセット
  • やりかたを分ける(分けなくてもよい)と
    • (1) 連綿とつなげる
      • 『Aだったら、A'になって、A'だったら、A''になって、A''だったら、A'''になって…』と連綿とつながって行って、結局どうなるの?という風に作ることもある
    • (2) 多数回試行
      • 『AだったらBになる』が「決定論的」であると、初期値Aが決まればBがどうなるかは「決定」するが、「AだったらBになったりB'になったりB''になったり…」する場合には、「確率的」に結果が決まる。このようなときには、「確率を計算して」やることもできるかもしれないし、「確率を計算することができな」かったり「確率を計算することが難し」かったりするときには、「何度も実行して、結果としてどのくらいの確率で起きたか」を観察する、という風にすることもある
    • (3) 複数の入力値、複数の出力値
      • 『a1,a2,a3,...だったら、b1,b2,b3,...』という関係のこともある
  • (1)『AだったらB』
    • 入力Aに対して出力B
      • 身長と体重の関係(BMI)
        • BMIをbと仮定すると(BMIがbであるモデル)、身長がhだったら、体重はw」
# weight/(height)^2=BMI
# BMI=20とすると
h<-1.7 # が与えられると
b<-20
w<-b*h^2
# いろいろな身長のヒトがいる
hs<-c(1.7,1.65,1.8,1.92,1.5,1.3,2,1,1.1)
ws<-b*hs^2
plot(hs,ws)

        • このモデルでは、
          • 入力値はhの1個、
          • 出力値はwの1個、
          • モデルを決めているパラメタはbの1個、
          • 入力値と出力値をつないでいる関数は、パラメタbを用いた関数1個、w=f(h)=b*h^2
  • (2)『Aだったら、A'になって、A'だったら、A''になって、A''だったら、A'''になって…』
    • 複利金利。1万円借りるとする。1年間で利息が15%という。元利そのまま借り続けると、何年後にいくら?
      • このモデルでは、
        • 入力値は"x<-c(1)"の1と、経過年数t=0,1,2,...
        • 出力値は時間経過における借金額 x
        • モデルを決めているパラメタはpの1個
        • 入力値と出力値をつないでいる関数はx[t+1]<-x[t]*(1+p)

# 初期預金額
x<-c(1)
# 金利
p<-0.15
# 何年後?
x[2]<-x[1]*(1+p)
x[3]<-x[2]*(1+p)
x[4]<-x[3]*(1+p)
x[5]<-x[4]*(1+p)
x[6]<-x[5]*(1+p)
x[7]<-x[6]*(1+p)
x[8]<-x[7]*(1+p)
x[9]<-x[8]*(1+p)
plot(x)
  • 『Aだったら、Bか、B'か、B''か』
    • じゃんけんをしたら、勝つか、アイコか、負けるか
# 試す回数
N<-1000
# 勝ち・アイコ・負けの確率
p<-c(1/3,1/3,1/3)
# 勝ち・アイコ・負けのどれかをpの確率でN回選べ
kekka<-sample(c("勝ち","アイコ","負け"),N,replace=TRUE,prob=p)
# 勝ち・アイコ・負けの回数を出せ
table(kekka)
> table(kekka)
kekka
アイコ   勝ち   負け 
   356    342    302 
  • (3)『a1,a2,a3,...だったら、b1,b2,b3,...』
    • a1とa2を入力値としてそれらを用いた2つの計算結果(p\times a1+q\times a2r\times a1^a2と)を出力値とする
      • このモデルでは、
        • 入力値は2個
        • 出力値は2個
        • モデルを決めるパラメタはp,q,rの3個
        • モデルを決める式はp\times a1+q\times a2r\times a1^a2の2個
p<-2
q<-3
r<-4
a1<-3
a2<-5
b1<-p*a1+q*a2
b2<-r*a1^a2