2015-06-04 4 views
5

У меня есть несколько годовых футбольных данных, которые я бы хотел проверить, чтобы проверить, могут ли определенные показатели команды повторяться в следующем году. Мои данные в data.frame и выглядит примерно так:Scatterplot of Year-on-Year Корреляция данных в R с использованием 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 

То, что я хочу быть в состоянии сделать это с этого рассеивания «Год п» на оси х, а «Год п + 1» на ось y. Так, например, 2003 против 2004, 2004 против 2005, 2005 против 2006 и т. Д. Все на одном и том же участке.

Я хотел бы, чтобы иметь возможность нарисовать линию наилучшим образом, чтобы увидеть, насколько сильна корреляция, является ли она повторяемой или нет.

Каков наилучший способ сделать это в R с помощью ggplot2? Я могу получить начальный участок с:

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

Тогда мне просто нужно добавить их все вручную? Есть ли встроенная функция для такого рода вещей? И если я добавлю их все один за другим, как мне лучше всего подойдет?

ответ

3

Вы хотите фрейм данных с рядом для каждой комбинации команды года, содержащий данные для в том году и в следующем году, а также название команды. Вы действительно можете получить это без какого-либо разделенного применить-скомбинировать манипуляции с использованием функции базы R:

(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 

В основном этот код преобразует все, но последний столбец df в вектор (с использованием unlist), сохраняя их в переменной yearN. В следующем году можно получить захват всего, кроме первого столбца df, в вектор. Наконец, название команды можно получить в виде повторной последовательности имен строк df.

Получение линии наилучшего соответствия простой модели линейной регрессии:

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

Теперь ggplot можно использовать как обычно для черчения:

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

3

Вам нужно сделать данные ggplot «дружественным», то это легко:

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

Смежные вопросы