2015-06-04 7 views
5

Ich habe einige jährliche Fußballdaten, die ich testen möchte, um zu sehen, ob bestimmte Teammetriken im nächsten Jahr wiederholbar sind. Meine Daten sind in einem data.frame und sieht ungefähr so ​​aus:Scatterplot der Jahr-zu-Jahr-Korrelation der Daten in R mit ggplot2

    y2003 y2004 y2005 
Team 1   51.95455 51.00000 53.59091 
Team 2   54.18182 56.31818 49.09091 
Team 3   48.68182 46.86364 49.22727 
Team 4   50.86364 47.68182 48.72727 

Was ich tun möchte, der Lage sein Scatterplot dies mit „Jahr n“ auf der x-Achse und „Jahr n + 1“ auf die y-Achse. So zum Beispiel 2003 vs. 2004, 2004 vs. 2005, 2005 vs. 2006 usw. alle auf demselben Grundstück.

Ich möchte dann in der Lage sein, eine Linie der besten Passform zu zeichnen, um zu sehen, wie stark die Korrelation ist, ob es wiederholbar ist oder nicht.

Was ist der beste Weg, dies in R mit ggplot2 zu tun? Ich kann die anfängliche Handlung mit bekommen:

p=ggplot(df,aes(y2003,y2004)) 
p + geom_point() 

Dann muss ich sie nur alle manuell hinzufügen? Gibt es eine eingebaute Funktion für diese Art von Dingen? Und wenn ich sie alle eins nach dem anderen addiere, wie bekomme ich die beste Passform?

Antwort

3

Sie wollen einen Datenrahmen mit einer Zeile für jedes Team-Jahres-Kombination, für die die Daten enthält dieses Jahr und das nächste Jahr sowie der Teamname. Sie können dies tatsächlich bekommen ohne Split-apply-kombinieren Manipulation Basis R Funktionen:

(to.plot <- data.frame(yearN=unlist(df[-ncol(df)]), 
         yearNp1=unlist(df[-1]), 
         team=rep(row.names(df), ncol(df)-1))) 
#   yearN yearNp1 team 
# y20031 51.95455 51.00000 Team1 
# y20032 54.18182 56.31818 Team2 
# y20033 48.68182 46.86364 Team3 
# y20034 50.86364 47.68182 Team4 
# y20041 51.00000 53.59091 Team1 
# y20042 56.31818 49.09091 Team2 
# y20043 46.86364 49.22727 Team3 
# y20044 47.68182 48.72727 Team4 

Grundsätzlich ist dieser Code konvertiert alle, aber die letzte Spalte von df in einen Vektor (mit unlist), so dass sie in Variable yearN speichern. Das nächste Jahr kann erhalten werden, indem man alle außer der ersten Spalte von df in einen Vektor ergreift. Schließlich kann der Teamname als eine wiederholte Sequenz der Zeilennamen von df erhalten werden.

eine Linie der besten Anpassung zu erhalten ist ein einfaches Modell der linearen Regression:

library(ggplot2) 
ggplot(to.plot, aes(x=yearN, y=yearNp1, col=team)) + geom_point() + 
    geom_abline(intercept=coefs[1], slope=coefs[2]) 

enter image description here

:

(coefs <- coef(lm(yearNp1~yearN, data=to.plot))) 
# (Intercept)  yearN 
# 28.3611927 0.4308978 

Jetzt ggplot können zum Plotten wie gewohnt verwendet werden

3

Sie müssen Daten ggplot „freundlich“ machen, dann ist es einfach:

df <- read.table(text=" y2003 y2004 y2005 
Team1 51.95455 51 53.59091 
       Team2 54.18182 56.31818 49.09091 
       Team3 48.68182 46.86364 49.22727 
       Team4 50.86364 47.68182 48.72727 
       ") 

#make data ggplot friendly 
mycomb <- combn(colnames(df),2) 
plotDat <- do.call(rbind, 
        lapply(1:ncol(mycomb),function(i){ 
        res <- df[,mycomb[,i]] 
        colnames(res) <- c("x","y") 
        res$Group <- paste(mycomb[,i],collapse="-") 
        res 
        })) 

#plot 
library(ggplot2) 
ggplot(plotDat,aes(x,y,col=Group)) + 
    geom_point() 

enter image description here

Verwandte Themen