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

Rを通じて統計学を学ぶ備忘録ブログ

SPSSからRに移行したい私のような人向けのR解説ブログ兼学習用備忘録。

第70回 ggplotの備忘録その7

今回は散布図に回帰直線と信頼区間を書き込み場合のggplotのコードを見ていきます。

単回帰分析であってもRのベースグラフィックから散布図に信頼区間を書き込むのは苦労しますが、ggplotでは非常に簡単です。ggplotが自動的に計算してくれます。

 

> ggplot(demo, aes(x, y))

+ geom_point()

+ geom_smooth(method = lm, col = "darkgreen", level = 0.95)

geom_smoothではなく、stat_smooth()でもかけます。

f:id:teruaki-sugiura:20160110182059p:plain

> ggplot(demo, aes(x, y))

+ geom_point()

+ geom_smooth(method = lm, col = "darkgreen", level = 0.99) 

#99%信頼区間の場合

f:id:teruaki-sugiura:20160110182110p:plain

> ggplot(demo, aes(x, y))

+ geom_point()

+ geom_smooth(method = lm, col = "darkgreen", se = FALSE)

se = FALSE:信頼区間を削除 

f:id:teruaki-sugiura:20160110182119p:plain

> ggplot(demo, aes(x, y))

+ geom_point()

+ geom_smooth(method = loess, col = "darkgreen", level = 0.95) 

#method = loess:局所加重多項式を適用

f:id:teruaki-sugiura:20160110182127p:plain

> ggplot(demo, aes(x, y, col = class))

+ geom_point()

+ scale_colour_brewer(palette="Set1")

+ geom_smooth(method = loess, level = 0.95)

#クラス毎に回帰直線と信頼区間を描く

f:id:teruaki-sugiura:20160110182134p:plain

> ggplot(dat, aes(x, y, col = class))

+ geom_point()

+ geom_smooth(se = FALSE, method = "lm")

#クラス毎に回帰直線と信頼区間を描く

f:id:teruaki-sugiura:20160110182147p:plain

> a <-subset(dat,dat$class=="a")

> b <-subset(dat,dat$class=="b")

> c <-subset(dat,dat$class=="c")

> d <-subset(dat,dat$class=="d")

> linear_a<-lm(y~x, a)

> linear_b<-lm(y~x, b)

> linear_c<-lm(y~x, c)

> linear_d<-lm(y~x, d)

> summary(linear_a)

> summary(linear_b)

> summary(linear_c)

> summary(linear_d)

> ggplot(demo, aes(x, y, col = class))

+ geom_point()

+ scale_colour_brewer(palette = "Set1")

+ geom_smooth(method = lm, level = 0.95, se = FALSE)

+ annnotate("text", label = "××", x = 55, y = 16)

#XXの部分にテキストを書き込む

f:id:teruaki-sugiura:20160110182601p:plain

> library(MASS)

> b <- biopsy

> b$classn[b$class=="benign"] <- 0

> b$classn[b$class=="malignant"] <- 1

#0,1変数を作成する

> ggplot(b, aes(x = V1, y = classn)) 

+ geom_point(position = position_jitter(width = 0.5, height = 0.1), alpha = 0.5, shape = 21, size = 2) 

+ geom_smooth(method = glm, method.args = list(family = "binomial"), fill = "darkgreen",  col = "darkgreen" )

f:id:teruaki-sugiura:20160110182437p:plain

上記の例は基本的に単回帰分析での作図方法になります。が、実際に分析するには単回帰分析はあまり使いません・・・問題をシンプルにすることを否定しているのではありません。

下記では、説明変数が2つの場合で、ある変数を調整すると、どのように目的変数が変動するかを見ている例です。x1を平均値で固定して、x2を調整した時のyの変動をみています。

 

> fit <- glm(y ~ x1 + x2, data = LOG, family = binomial(link = "logit"))

> n <- dim(LOG)[1]

> LOG$pred <- predict(fit, type = "response", list(x2 = LOG$x2, x1 = rep(mean(LOG$x1), n)))

> LOG$se <- predict(fit, type = "response", list(x2 = LOG$x2, x1 = rep(mean(LOG$x1), n)), se.fit = TRUE)$se.fit

> LOG$fit.lower <- with(LOG, pred - 1.96*se)

> LOG$fit.upper <- with(LOG, pred + 1.96*se)

> ggplot(LOG, aes(x = x2))

+ geom_point(aes(y = y), position=position_jitter(width = 0.5, height = 0.1), alpha = 0.5, shape = 21, size = 2)

+ geom_line(aes(y = pred), color = "darkgreen")

+ geom_ribbon(aes(ymin = fit.lower, ymax = fit.upper), fill="darkgreen", alpha = 0.2)

+ xlab("x2") + ylab("y") 

f:id:teruaki-sugiura:20160110182445p:plain

 

以上でおしまい。

 

広告を非表示にする