2016-07-26 5 views
2

私はRの新機能です.GGPLOTにgeom_smooth(method = lm)を使用して回帰直線を適合させようとしています。log-log ggplotの回帰直線勾配のバリエーション

私は、同じデータセットの場合、軸が線形リニアから線形ログに、そしてログログに変更されると、回帰直線の傾きが変更されることに気付きました。相関も真実ではないようだ。

データ(R)の相関共effecientは、私が最初に線形スケール上に自分のデータをプロットした-0.125

conc <- c(1.5188717, 1.8794363, 2.5455899, 1.5810686, 0.4938004, 2.9526288) 
absp <- c(6.975519, 2.279606, 2.265391, 1.611868, 1.379097, 1.324827) 
mydata <- data.frame(conc, absp) 

corr_eqn <- function(x, y) { 
corr_coef <- round(cor(x, y), digits=3) 
paste("italic(r) == ", corr_coef) 
} 
value <- data.frame(r=corr_eqn(conc, absp)) 

1です。ここでy切片は〜3.1

ggplot(mydata, aes(x=conc, y=absp)) + 
labs(x="Conc.", y="Absp.") + 
scale_x_continuous() + 
scale_y_continuous(breaks=c(0,1,2,3,4,5,6,7)) + 
geom_point(size=4) + 
theme(text = element_text(size=18, face="bold"), legend.position="none")+ 
geom_smooth(method=lm, se=FALSE) + 
geom_text(data=value, aes(x=2, y=6, label=r), 
     colour="red", size=5, parse=TRUE) 

2のように見える。しかし、私はLOG2スケールにy軸を変更して、x軸はリニアに残っている場合、y切片は2〜のように見えます3.

ggplot(mydata, aes(x=conc, y=absp)) + 
labs(x="Conc.", y="Absp. (log2)") + 
scale_x_continuous() + 
scale_y_continuous(trans=log2_trans(),breaks=c(0,1,2,3,4,5,6,7)) + 
annotation_logticks(sides="l") + 
geom_point(size=4) + 
theme(text = element_text(size=18, face="bold"), legend.position="none")+ 
geom_smooth(method=lm, se=FALSE) + 
geom_text(data=value, aes(x=2, y=6, label=r), 
      colour="red", size=5, parse=TRUE) 

3、最終的に、私はLOG2スケールにy及びx軸の両方を変更すると、y切片が2未満に低下し、勾配は今正であるように見えます。

ggplot(mydata, aes(x=conc, y=absp)) + 
labs(x="Conc. (log2)", y="Absp. (log2)") + 
scale_x_continuous(trans=log2_trans()) + 
scale_y_continuous(trans=log2_trans(),breaks=c(0,1,2,3,4,5,6,7)) + 
annotation_logticks(sides="lb") + 
geom_point(size=4) + 
theme(text = element_text(size=18, face="bold"), legend.position="none")+ 
geom_smooth(method=lm, se=FALSE) + 
geom_text(data=value, aes(x=2, y=6, label=r), 
     colour="red", size=5, parse=TRUE) 

Image, Scatter plots

私はスロープやy切片がちょうどスケールをログに記録するリニアから軸を変更することで変更することができます方法を理解していないようですか?私はここで何らかの明白な誤りを犯したのでしょうか?助けやアドバイスに感謝します。

答えて

1

stat_smoothは、変換されたデータにモデルをフィットする:

2^coef(lm(log2(absp) ~ conc, data = mydata))[1] 
#(Intercept) 
# 2.405666 

ggplot(mydata, aes(x=conc, y=absp)) + 
    labs(x="Conc.", y="Absp. (log2)") + 
    scale_x_continuous(limits = c(0, 3)) + 
    scale_y_continuous(trans=log2_trans(),breaks=c(0,1,2,2.4056,3,4,5,6,7)) + 
    annotation_logticks(sides="l") + 
    geom_point(size=4) + 
    theme(text = element_text(size=18, face="bold"), legend.position="none")+ 
    stat_smooth(method=lm, se=FALSE, fullrange = TRUE) + 
    geom_text(data=value, aes(x=2, y=6, label=r), 
      colour="red", size=5, parse=TRUE) 

resulting plot

は間違いなく、これはバグであると報告されるべきです。

編集:ハドレーsaysこれは設計によるものです。

+0

ありがとうございますが、問題はまだ対数スケールのためpersits。 – leo1

+0

私は分かりません。まったく同じことがそこで起こります。'2^coef(lm(log2(absp)〜log2(conc)、data = mydata))[1]'は2.075を与え、Conc = 1で見える値です。 – Roland

0

ありがとうございます。これをハドリーと追跡していただきありがとうございます。

私はgeom_smoothの代わりにstat_smoothを使用するというあなたの提案に注目しました。

また、ログ直線性または対数 - ログプロットにおける回帰直線の傾きのこの変化の理由が、hereからわかった。この場合、scale_x_continuous(trans=log2_trans())またはscale_y_continuous(trans=log2_trans())を使用すると、スケール変換とデータ変換後に回帰分析が行われますが、coord_trans(x="log2", y="log2")を使用すると、まず非変換データに対して回帰分析が実行され、変換された座標にプロットされます。

変更されたコードでは、log2-log2プロットのy切片(3.21)と負の傾き(負の相関による)の正しい値になりました。

ggplot(mydata, aes(x=conc, y=absp)) + 
labs(x="Conc. (log2)", y="Absp. (log2)") + 
coord_trans(x="log2", y="log2") + 
geom_point(size=4) + 
stat_smooth(method=lm, se=FALSE, fullrange = TRUE) + 
theme(text = element_text(size=18, face="bold"), legend.position="none") + 
geom_text(data=cor_val, aes(x=2, y=6, label=r), 
      colour="red", size=5, parse=TRUE) 

enter image description here

関連する問題