社会人が統計学の基礎を学び、実務で活かす

Rコード:定義域ごとに違う関数の値をとるグラフを描く。

スポンサーサーチ

xの範囲ごとに違う関数を利用したい場合

統計学における確率密度関数では、xが取り得る値以外が起こる確率は0であるため、

xがある範囲[a,b]に含まれる場合は関数f(x)の値をとり、それ以外は0の値をとる、

といった場合分けをした関数のグラフを描きたいことが多々あります。

例えば「期待値とは何か?」のページの練習問題で以下のような確率密度関数を考えました。

f_{X}(x)=2x \qquad (0\leq x\leq 1)

このケースではxの定義域が[0,1]の間なので、xが0以外の値をとる場合の確率は0です。

しかし、普通に以下のようにRでプログラムを書くと、定義域ごとの場合分けができていないため、欲しい結果が得られません。

f=function(x){
  return(2*x)
}
curve(f(x),xlim=c(-2,2),ylim=c(-2,2), asp=1,
      main="",
      ylab="f(x)",
      col="red")
abline(h=0)
abline(v=0)


rplot1

上記のようにxの範囲が-∞から∞になってしまうので、プログラミングをする際は以下のようにまずはif()関数を使って、xの定義域ごとに確率密度関数f()がとる値を分けます。

f=function(x){
  if (x<=0){f=0}
  else if (x>=1){f=0}
  else {f=2*x}
  return(f)
}

次に、以下のVectorize()関数を利用して、確率分布の関数f()をベクトル化して、関数曲線を描くcurve()関数の中に入れます。

h=Vectorize(f)
curve(h,xlim=c(-2,2),
   ylim=c(0,2), 
   asp=1,
       main="",
       ylab="f(x)")


rplot2

これで定義域ごとに違う関数の値をとるグラフを描くことができました。
最後に以下のように指定の範囲にスカイブルーの色をつけて出来上がりです。

x=c(0,seq(0,1,length=100),1)
y=2*x
cord.x=c(0,x,1)
cord.y=c(0,y,0)
polygon(cord.x,cord.y,col='skyblue')


rplot3

次にxが[-∞,0],[0,1],[1,∞]ごとに違う関数の値をとる以下のような関数のグラフをかいてみます。


screen-shot-2016-11-08-at-7-57-52-pm

上で述べた手法を応用すれば、下記のコードでグラフを描くことができます。

f=function(x){
  if (x<=-1/2){f=-1}
  else if (x>=1/2){f=1}
  else {f=2*x}
  return(f)
}

h=Vectorize(f)
curve(h,xlim=c(-5,5),ylim=c(-2,2), asp=1,
      main="",
      ylab="f(x)",
      col="red")
abline(h=0)
abline(v=0)


rplot4


プログラミングとソフトウェア

スポンサー募集中。

統計ドットリンクでは広告出稿をご希望のスポンサー様を募集しております。ページビューなどは、「お問い合わせ」からご連絡ください。

更新・勉強会などの情報を受け取る。

以下からFacebookページをフォローもしくは、メールマガジンへの登録をすると、更新情報、勉強会、講習会、交流会の案内など各種情報を受け取ることができます。

↑こちらからFacebookページをフォロー。
 

メルマガ登録はこちら

理系の就職・職業訓練

統計ドットリンクでは、理系の大学生、大学院生、第二新卒の就職や転職を応援しています。職業訓練、求人やエージェントなどの必要な情報を選別し、紹介しています。 就職、職業訓練の情報を確認する。
PAGETOP
Powered by WordPress & BizVektor Theme by Vektor,Inc. technology.