2015-06-04 16 views
5

Tôi có một số dữ liệu bóng đá hàng năm mà tôi muốn kiểm tra xem liệu các số liệu nhóm nhất định có thể lặp lại trong năm tới hay không. Dữ liệu của tôi là trong một data.frame và trông giống như sau:Sự tương quan của Dữ liệu về Dữ liệu trong R bằng cách sử dụng 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 

Những gì tôi muốn để có thể làm phân tán là điều này với "Năm n" trên trục x và "Năm n + 1" trên trục y. Vì vậy, ví dụ 2003 so với 2004, 2004 so với 2005, 2005 so với 2006, vv tất cả trên cùng một lô.

Sau đó tôi muốn có thể vẽ một đường phù hợp nhất để xem mức độ tương quan mạnh như thế nào, cho dù có lặp lại hay không.

Cách tốt nhất để thực hiện điều này trong R bằng ggplot2 là gì? Tôi có thể nhận được âm mưu ban đầu với:

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

Sau đó, tôi chỉ cần thêm tất cả theo cách thủ công? Có một chức năng sẵn có cho loại điều này? Và nếu tôi thêm tất cả chúng một-by-một làm thế nào tôi sẽ có được sự phù hợp nhất?

Trả lời

3

Bạn muốn có một khung dữ liệu với một hàng cho mỗi sự kết hợp đồng đội năm, có chứa các dữ liệu cho năm đó và năm tiếp theo cũng như tên nhóm. Bạn thực sự có thể có được điều này mà không cần bất kỳ split-áp-kết hợp các thao tác sử dụng các hàm cơ sở 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 

Về cơ bản mã này chuyển đổi tất cả nhưng cột cuối cùng của df vào một vector (sử dụng unlist), lưu trữ chúng trong biến yearN. Năm tiếp theo có thể thu được bằng cách lấy tất cả trừ cột đầu tiên của df thành một vectơ. Cuối cùng, tên nhóm có thể được lấy như một chuỗi lặp lại của các tên hàng của df.

Bắt một dòng phù hợp nhất là một mô hình đơn giản tuyến tính hồi quy:

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

Bây giờ ggplot thể được sử dụng như bình thường cho âm mưu:

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

Bạn cần phải làm cho dữ liệu ggplot "thân thiện", sau đó nó rất dễ dàng:

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

Các vấn đề liên quan