Regressionskoeffizent in Facets

Wie erstelle ich Grafiken, was ist zu beachten?

Moderatoren: EDi, jogo

Antworten
retep
Beiträge: 99
Registriert: Do Sep 06, 2018 7:50 pm

Regressionskoeffizent in Facets

Beitrag von retep »

Hallo,

ich würde gerne in folgender Angelegenheit um die Hilfe der Community bitten:
Mein Ziel ist es für jedes Grafik (Facet )separat den Regressionskoeffizenten plus
die dazugehörige Gleichung darzustellen. In dem Buch Chang, W.: R graphics cookbook: [practical recipes for visualizing data].
Sebastopol Calif. u.a.: O'Reilly, 2013 [erschienen 2012], Seite 179 wird die Vorgehensweise
sehr gut dargestellt. Und es funktioniert! Trotzdem gibt es zwei Probleme:
1. Die Überschriften in den Facets, welche ich auf "Zone 1", "Zone 2", etc. ändern
wollte erscheinen nicht.
2. Die Regressionskoeffizenten+zugehörige Gleichung passen nicht in die Grafik wenn ich den Wertebereich auf "scales="free" setze.
Ich muss den gesamten Wertebereich darstellen können, weil sich dieser in jedem Facet ändert, leider!

3. Die Befehle:

Code: Alles auswählen

annotate("text", label=formula, data= labels, parse=TRUE, x=Inf, y=-Inf, hjust=1.1, vjust=-.5)
 annotate("text", label=r2, data= labels, parse=TRUE, x=Inf, y=-Inf, hjust=1.1, vjust=-.5)

funktionieren hier nicht, denn damit könnte man die Annotations automatisch innerhalb der Grafik justieren lassen.

Kann mir vielleicht jemand einen Tipp geben wie ich die Probleme lösen kann?
Ich bin für jeden Tipp dankbar.

Im Anhang ist die dazugehörige Mini-Datenbank. Und hier ist die Befehlssequenz welche ich für den Problemfall benutzt habe:

Code: Alles auswählen

# Original plot
              
ggplot(TOC_TOS,aes(x = TOC, y = TOS, fill = TOC_Zone)) + 
geom_point() + 
geom_smooth(method="lm", se=TRUE) + 
facet_wrap( ~ TOC_Zone, scales = "free")+
scale_x_continuous(name =" TOC [%]") +
scale_y_continuous(name =" TOS [%]")+
theme_bw()

# Ändern der Facet-Überschriften
f_labels <- data.frame(TOC_Zone = c("Zone 1", "Zone 2", "Zone 3", "Zone 4"),label = c("Regression", "Regression", "Regression", "Regression")); f_labels
            geom_text(x=6, y=40, aes(label=label), data=f_labels)
            
# Regression für jedes Facet separat
 lm_labels <- function(TOC_TOS) {
              mod <- lm(TOC ~ TOS, data=TOC_TOS)
              formula <- sprintf("italic(y) == %.2f %+.2f * italic(x)",
                                 round(coef(mod)[1], 2), round(coef(mod)[2], 2))
              
              r <- cor(TOC_TOS$TOC, TOC_TOS$TOS)
              r2 <- sprintf("italic(R^2) == %.2f", r^2)
              data.frame(formula=formula, r2=r2, stringsAsFactors=FALSE)
            }            
# Mittels dplyr Dataframe erstellen
library(plyr)
labels <- ddply(TOC_TOS, "TOC_Zone", lm_labels); labels 

# Einfügen der Regressions- Gleichungen in ggplot
ggplot(TOC_TOS,aes(x = TOC, y = TOS, fill = TOC_Zone)) + 
              geom_point() + 
              geom_smooth(method="lm", se=TRUE) + 
              facet_wrap( ~ TOC_Zone)+                             # scales = "free"
              scale_x_continuous(name =" TOC [%]") +
              scale_y_continuous(name =" TOS [%]")+
              geom_text(x=10, y=2, aes(label=formula), data=labels, parse=TRUE, hjust=0) +
              geom_text(x=10, y=1.5, aes(label=r2), data=labels, parse=TRUE, hjust=0)+
              theme_bw() 
Vielen Dank für Eure Geduld & Anteilnahme,

retep
Dateianhänge
TOC_TOS.csv
(1.96 KiB) 66-mal heruntergeladen
Antworten