【问题标题】:smooth curve of scatter data frame data in R and add confedence intervalR中分散数据帧数据的平滑曲线并添加置信区间
【发布时间】:2012-07-22 23:41:40
【问题描述】:

我有很多 data.frame,每个都包含很多列。说我的第一个data.frame col1=a, col2=b,col3=c

我想绘制 x-axis=b/a 和 y-axis=a。我设法绘制它们(散点图)

plot (dataframe$b/dataframe$a, dataframe$a, xlim=...,ylim=..) 

现在,我需要获取散点数据的模式(我不想要线性回归,因为 x 和 y 都在变化)。我确实使用了命令loess(..) 并且能够显示模式。

lo_smooth<-loess(x,y, f=number, iter=number)

如何将置信区间 (CI) 添加到图表中?我的目标是检查两个 data.frame 是否在彼此的 CI 内。

【问题讨论】:

  • 查看包ggplot2,特别是stat_smooth。我认为像ggplot(dataframe, aes(x= b/a, y= a)) + geom_point() + stat_smooth() 这样的东西可以解决问题
  • 我使用了以下命令并且它有效。但是,我如何在一个图中加入例如 3 个 ggplots。 ggplot(dppm, aes(x= b/a, y= a)) + geom_point() + stat_smooth(method="loess",se=TRUE,level=0.90)+coord_cartesian(ylim = c(0, 100))
  • 我已经添加了一个解决这个问题的答案。

标签: r


【解决方案1】:

使用您的尝试(干得好!)加上您的说明的解决方案

一些虚拟数据

dppm <- data.frame(a = runif(100, 1, 100), b = runif(100,1, 100))
dppm_2 <- data.frame(a = runif(100, 1, 75), b = runif(100,1,75))
dppm_3 <- data.frame(a = runif(100, 1,50), b = runif(100,1,50))

使用 reshape2 将这些数据融合到单个数据帧中 库(reshape2)

data_list <- list(dppm1 = dppm, dppm2 = dppm_2, dppm3 = dppm_3)
all_data <- melt(data_list, id.vars = c('a','b'))

这个单一的数据框有一列L1是标识符(data_list中的列表组件的名称。

head(all_data)
          a        b    L1
## 1 83.202896 36.94026 dppm1
## 2 42.618987 11.23863 dppm1
## 3 29.505029 11.91742 dppm1
## 4 63.569487 59.07395 dppm1
## 5 94.499772 47.32779 dppm1
## 6  4.535389 64.11570 dppm1

然后我们可以通过这个标识符绘制这个组合的数据集和颜色。 我们还将平滑的 fill 设置为相同的标识符,以便 CI 以相同的方式着色。

ggplot(all_data,aes(x = b/a, y = a, colour = L1)) + 
  geom_point() + 
  stat_smooth(method = "loess", se = TRUE,level = 0.90, aes(fill = L1))+
  coord_cartesian(ylim = c(0, 100))

【讨论】:

  • 谢谢。它工作完美。但是,我注意到 stat_smooth(method = "loess",...) 中有一些奇怪的地方。平滑线实际上并未正确拟合分散的数据。例如,数据框散点之一的平滑线接触零,而散点数据远高于轴。换句话说,我觉得 method="loess" 表现不佳。有什么建议???
猜你喜欢
  • 2018-05-07
  • 2020-02-16
  • 2012-02-28
  • 2020-11-20
  • 1970-01-01
  • 2014-08-04
  • 1970-01-01
  • 2018-03-07
  • 2019-05-15
相关资源
最近更新 更多