読者です 読者をやめる 読者になる 読者になる

廿TT

譬如水怙牛過窓櫺 頭角四蹄都過了 因甚麼尾巴過不得

ggplot2 の stat_smooth で描かれる半透明の帯は標準誤差でなく信頼区間

ggplot2 で stat_smooth をかませてやると半透明のリボンみたいなのが描かれてきれいげです。

library(ggplot2)
p<-ggplot(cars,aes(x=dist,y=speed)) +
  geom_point()+ 
  stat_smooth(method = "lm")
p

f:id:abrahamcow:20150124041738p:plain

この半透明のリボンについて、

p + stat_smooth(method = "lm",
se = FALSE) # TRUE(デフォルト)にすると標準誤差(たぶん)
# が半透明で表示されてカッコイイ

ggplot2についてちょっと勉強した(1) - もうカツ丼でいいよな

stat_smooth(method = "lm", se = FALSE)
とかくと、標準誤差は表示されなくなります。

ggplot2で回帰直線付き散布図を描く方法 さらにクラスごとに色分けもした(1) | リケジョ28歳が育休中に学んだ【「R」によるデータ分析】の記録

という説明がなされてますが、これ、標準誤差じゃなくて95%信頼区間みたいです、引数の名前が "se" なのでまぎらわしいのですが。

(信頼水準は引数 level で指定できます。)

geom_smooth. ggplot2 0.9.3.1 にも、"confidence interval around smooth" と書かれています。

信頼上限と信頼下限を教科書どおりに打ち込んで、プロットに重ねてやると半透明の区間と一致することがわかります。

x <- cars$dist
y <- cars$speed

n <- length(x)
b <- var(x, y)/var(x) #回帰係数
a <- mean(y)-b*mean(x)

sx2 <- var(x)*(n-1)

alpha=0.05

ta <- qt(alpha/2, n-2, lower.tail=FALSE)
Ve <- (var(y)-var(x, y)^2/var(x))*(n-1)/(n-2)

lower <- function(x1){
  temp <- ta*sqrt(Ve)*sqrt(1/n+(x1-mean(x))^2/sx2)
  y1 <- a+b*x1 -temp  
}


upper <- function(x1){
  temp <- ta*sqrt(Ve)*sqrt(1/n+(x1-mean(x))^2/sx2)
  y1 <- a+b*x1 +temp  
}


p + stat_function(fun=upper,lty=2) +
  stat_function(fun=lower,lty=2)

f:id:abrahamcow:20150124041826p:plain


※ご本人に直接コメント差し上げようかと思ったんだが、おれがなんかネット経由で他人様に指摘するとすごい角が立つみたいなのね。コミュニケーション能力の高いどなたか、代わりに伝えて頂けませんか。


参考:R -- 散布図(各種の描画機能付き)