2016-07-26 5 views
2

Ich bin ein neuer R. Ich versuche, eine Regressionslinie in ggplot mit geom_smooth (method = lm) zu passen.Variationen in Regressionslinie Steigung für log-log ggplot

Ich bemerke zufällig, dass für den gleichen Datensatz die Steigung der Regressionslinie verändert wird, wenn die Achsen von linear-linear zu linear-log und log-log geändert werden, so sehr, dass der y-Achsenabschnitt ist anders und die Korrelation scheint ebenfalls unwahr zu sein.

Die Korrelation co-effecient für die Daten (r) -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. Ich habe meine Daten auf einen ersten linearen Skala aufgetragen. Hier ist der y-Abschnitt erscheint ~ 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. Aber zu sein, wenn ich die y-Achse zu log2 Skala verändern und die x-Achse bleibt in linear, der y-Abschnitt erscheint zwischen 2 und 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. und schließlich, wenn sowohl y und I x-Achse zu log2 Skala verändern, fällt der y-Achsenabschnitt auf weniger als 2, und die Steigung wird jetzt positiv.

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

ich scheinen nicht zu verstehen, wie die Steigung oder y-Schnittpunkte können nur von der Achse von linear durch Änderung ändern Waage anmelden? Habe ich hier einen offensichtlichen Fehler begangen oder fehle ich etwas? Ich wäre dankbar für jede Hilfe/Beratung.

Antwort

1

stat_smooth passt das Modell auf die transformierten Daten:

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

Argumentieren, das ein Fehler ist und berichtet werden sollte.

Bearbeiten: Hadley says ist es von Design.

+0

Danke, aber das Problem Persits noch für log-log-Skalen. – leo1

+0

Ich verstehe es nicht. Genau das passiert auch dort.'2^coef (lm (log2 (absp) ~ log2 (conc), Daten = mydata)) [1]' ergibt 2.075 und das ist der Wert, den Sie bei Conc = 1 sehen. – Roland

0

Danke @Roland dies für folgende mit Hadley auf.

Ich habe zur Kenntnis genommen, Ihren Vorschlag stat_smooth statt geom_smooth zu verwenden.

Auch der Grund für diese beobachteten Variationen in der Steigung der Regressionsgeraden in logarithmischen oder logarithmischen Plots von here. In diesem Fall, wenn scale_x_continuous(trans=log2_trans()) oder scale_y_continuous(trans=log2_trans()) verwenden, wird die Regressionsanalyse nach dem Umfang und der Datenumwandlungen durchgeführt, aber wenn coord_trans(x="log2", y="log2") die Regressionsanalyse verwendet, wird zunächst auf die nicht transformierte Daten durchgeführt und dann aufgetragen, um die transformierten Koordinaten.

My modifizierten Code führt nun den korrekten Wert für die y-Achsenabschnitt (3,21) und eine negative Steigung (entsprechend negative Korrelation) für log2 log2-Plot.

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