【问题标题】:How to plot the average linear regression of different data sets in a single graph如何在单个图中绘制不同数据集的平均线性回归
【发布时间】:2019-10-10 22:03:14
【问题描述】:

我正在分析一个数据集,并想量化整个数据集的线性回归。数据集有不同的因变量,但只有一个自变量。

我尝试使用 ggplot2 包中的 stat_smooth() 来使用简单的线性回归。这给出了数据集的单独回归线,但我想要做的是将这些回归线组合成一条回归线,代表这两个回归线,也许是更多回归线的平均值

    geom_point(aes(x= DateAndTime, y= T_423), na.rm=TRUE, color="purple", shape=19, size=3)+
    geom_point(aes(x= DateAndTime, y= T_422), na.rm=TRUE, color="red", shape=8, size=1)+
    ggtitle("Module Temperature STP423 - Total distribution") +
           xlab("Date") + ylab("Module Temperature (C)")


数据看起来像这样:

        Dates            X1            X2
1    2014-01-04      8.0645816      7.2969667
2    2014-01-06      7.7804850      7.1507470
3    2014-01-07      8.8772607      8.6917391
4    2014-01-08      8.8943146      8.3475009
5    2014-01-10      11.6734008     10.6493480
6    2014-01-11      9.0915727      8.5793932
7    2014-01-12      9.5216658      9.4891858
8    2014-01-13     -6.2493962     -6.9360515

【问题讨论】:

  • 将它们组合成一个长数据集,用一个额外的列指示您可以设置color 的来源。如果您需要其他帮助,请提供输入数据的样本,最好以复制/粘贴的方式共享。 (dput(x) 生成 x 的复制/粘贴表示,或共享代码以模拟/创建示例数据)
  • This FAQ 基本上是你想要做的。它已经足够接近了,我很想将这个问题作为一个重复来结束……如果你想把它作为一个单独的问题保留,它肯定需要样本数据。
  • @Gregor 这是一个不同的问题。也许我不能很好地解释它。我想要实现的是在图中针对多个参数进行一般线性回归(线和方程)。日期在这里是自变量,两个不同位置的温度用 X1 和 X2 表示。两者都会对日期有自己的依赖性。我想要实现的是表示 X1 和 X2 的单一回归线。
  • 我完全理解。相同的解决方案将起作用。

标签: r ggplot2 regression


【解决方案1】:

ggplot2 最适合长格式数据。例如,geom_smooth 要求它的所有 y 值都在一个列中。所以我们需要将您的数据转换为长格式。我特别重用了代码from this FAQ(因为它是关于ggplot的),但另一个常见问题解答How to reshape data from wide to long?涵盖了其他几种方法。

test_data = read.table(text = '        Dates            X1            X2
1    2014-01-04      8.0645816      7.2969667
2    2014-01-06      7.7804850      7.1507470
3    2014-01-07      8.8772607      8.6917391
4    2014-01-08      8.8943146      8.3475009
5    2014-01-10      11.6734008     10.6493480
6    2014-01-11      9.0915727      8.5793932
7    2014-01-12      9.5216658      9.4891858
8    2014-01-13     -6.2493962     -6.9360515', header = T)

test_data$Dates = as.Date(test_data$Dates)

# code copy/pasted from linked FAQ, only changed id = "date" to id = "Dates"
library("reshape2")
library("ggplot2")

test_data_long <- melt(test_data, id = "Dates")  # convert to long format


# now we can plot:

ggplot(test_data_long, aes(x = Dates, y = value)) +
  geom_point(aes(color = variable, size = variable, shape = variable)) +
  geom_smooth() +
  labs(title = "Module Temperature STP423 - Total distribution",
       x = "Date",
       y = "Module Temperature (C)") +
  scale_size_manual(values = c(1, 3)) +
  scale_color_manual(values = c("red", "purple")) +
  scale_shape_manual(values = c(8, 19))

【讨论】:

  • 太棒了。谢谢!!
猜你喜欢
  • 2016-07-01
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 2017-08-31
  • 2020-11-26
  • 2019-06-09
  • 2021-03-18
相关资源
最近更新 更多