使用ggplot2对R中数据的年度相关性的散点图

Bor*_*ker 5 plot r ggplot2

我有一些年度足球数据,我想测试一下,看看明年某些球队指标是否可重复.我的数据在data.frame中,看起来像这样:

                    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   
Run Code Online (Sandbox Code Playgroud)

我想要做的是在x轴上用"Year n"和y轴上的"Year n + 1"进行散点图.因此,例如2003年与2004年,2004年与2005年,2005年与2006年等等都在同一情节中.

然后,我希望能够画出一条最合适的线,看看相关性有多强,无论它是否可重复.

使用ggplot2在R中执行此操作的最佳方法是什么?我可以得到最初的情节:

 p=ggplot(df,aes(y2003,y2004))
 p + geom_point()
Run Code Online (Sandbox Code Playgroud)

然后我只需要手动添加它们吗?这种东西有内置功能吗?如果我逐一添加它们,我将如何获得最佳效果?

jos*_*ber 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
Run Code Online (Sandbox Code Playgroud)

基本上,此代码将除最后一列之外的所有列转换df为向量(使用unlist),并将它们存储在变量 中yearN。可以通过将除第一列之外的所有列抓取df到向量中来获得下一年。最后,可以通过 的行名称的重复序列获得团队名称df

获得最佳拟合线是一个简单的线性回归模型:

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

现在ggplot可以照常用于绘图:

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

在此输入图像描述