R言語のggplot2で関数グラフを描画するには?

 Rのggplot2を用いて作図する方法を説明します。

要約

 Rでこのようなグラフを作れます。

パッケージの準備

 ggplot2はRにもともと入っている機能ではありません。インストールして、呼び出しする必要があります。

install.packages("ggplot2") #インストール(初回のみ)
library(ggplot2) #読み出し(RStudio起動のたびに)

関数の作図

(1)作図

 以下のコードを実行すると、関数の描画ができます。

#データフレームを用意
data_0 <- data.frame(X = x <- seq(0,4,0.1)) #0から4まで、0.1ずつ数字を作り、xに代入し、それをXとする
 
#関数の作成
func_1 <- function(x) (x-1)*(x-3) #二次関数y=(x-1)(x-3)を作る。コードでは「*」を忘れないように
 
#描画
ggplot(data = data_0, aes(x = X))+  #data0の範囲、横軸にXを表示
  stat_function(fun = func_1) #関数func_1を描画

 下図の二次関数のグラフが出力されます。

(2)色塗り

 以下のコードを実行すると、関数の描画と色塗りができます。

data_0 <- data.frame(X = x <- seq(0,4,0.1)) #関数の出力範囲を0〜4
data_1 <- data.frame(X = x  <- seq(1,3,0.1)) #色塗りの範囲を1〜3
func_1 <- function(x) (x-3)*(x-1) #二次関数
 
ggplot(data = data_0, aes(x = X))+ 
  stat_function(fun = func_1)+
  geom_ribbon(data=data_1,aes(x=X, ymin=0, ymax=func_1(x))) #geom_ribbonで色塗り。x=XでXを横軸に指定。ymin=0とymax=func_1(x)で、0とfunc_1の間を色塗り。

 なお、fillやalphaを指定すると、カラフルにできます。↓

ggplot(data = data_0, aes(x = X))+ 
  stat_function(fun = func_1)+
  geom_ribbon(data=data_1,aes(x=X, ymin=0, ymax=func_1(x)), fill="green",alpha=0.3) #fill="色の名前" alpha=透明度

 例えば、緑の透明度0.3ですと、こんな感じです。

作図の例

(1)二次関数で囲まれた領域

data_0 <- data.frame(X = x <- seq(0,4,0.1)) #関数の出力範囲を0〜4
data_1 <- data.frame(X = x  <- seq(1,3,0.1)) #色塗りの範囲を1〜3
func_1 <- function(x) (x-3)*(x-1) #二次関数1
func_2 <- function(x) -(x-3)*(x-1) #二次関数2

ggplot(data = data_0, aes(x = X))+ 
  stat_function(fun = func_1)+
  stat_function(fun = func_2)+
  geom_ribbon(data=data_1,aes(x=X, ymin=func_2(x), ymax=func_1(x)), fill="green",alpha=0.3)  #yminとymaxでそれぞれの関数を指定

(2)確率密度関数

 正規分布は↓

data_0 <- data.frame(X = x <- seq(-4,4)) 
 
ggplot(data = data_0, aes(x = X))+ 
  stat_function(fun = dnorm, args=list(mean=1, sd=1))  #母平均1、標準偏差1

 t分布は↓

data_0 <- data.frame(X = x <- seq(-4,4))
 
ggplot(data = data_0, aes(x = X))+ 
  stat_function(fun = dt,args=list(df=3)) #自由度3

 カイ二乗分布は↓

data_0 <- data.frame(X = x <- seq(0,20)) 

ggplot(data = data_0, aes(x = X))+ 
  stat_function(fun = dchisq, args=list(df=5)) #自由度5

 F分布は↓

data_0 <- data.frame(X = x <- seq(0,5)) 

ggplot(data = data_0, aes(x = X))+ 
  stat_function(fun = df,args=list(df1=10,df2=10)) #自由度(10,10)

(3)有意水準の図示

 次のようにコーディングして

a <- 0.05 #有意水準を0.05に設定

#自由度5のカイ二乗統計量でP値が0.05になる数値を求めてqとする
b <- 1- a #累積分布
q <- qchisq(b,5) #11.07が

#描画
ggplot(data = data.frame(X = c(0, 20)), aes(x = X))+  #0から20を描画
  stat_function(fun = dchisq, args=list(df=5))+ 
  geom_ribbon(data=data.frame(X=x<-seq(0,q,len=101), Y=dchisq(x,5)),aes(x=X, ymin=0, ymax=Y),fill="green",alpha=0.3)+  #0から11.07を緑
  geom_ribbon(data=data.frame(X=x<-seq(q,20,len=101), Y=dchisq(x,5)),aes(x=X, ymin=0, ymax=Y),fill="red",alpha=0.6)   #11.07から20を赤

 下図の赤の面積が0.05(有意水準)です。

コメント欄 お気軽にコメントをお寄せください!

タイトルとURLをコピーしました