解释分箱散点图 (R) 并计算均值方差
Interpreting binned scatterplot (R) and calculating variance of the mean
我正在尝试根据样本绘制模拟结果。因此,我有很多数据点 - 所以我选择了分箱散点图。其中一篇论文建议绘制分箱图,以便通过计算彩色点的方差来计算一阶效应。
我的情节是这样的:
我从这里使用了这个情节的代码:
making binned scatter plots for two variables in ggplot2 in R
不过,我不太懂怎么解读剧情。我知道彩色点是 bin 的平均值,但它实际上告诉我们有关数据的什么信息以及如何进一步计算这些黄色点的方差?
我们能否从这个图中暗示变量显示(弱)线性关系,即使一些黄色点并没有真正遵循趋势?
提前致谢!
我们可以通过cut()
函数对数据进行分箱,如下,
mybin <- cut(df$x,20,include.lowest=TRUE,right = FALSE)
df$Bins <- mybin
然后计算分箱数据的平均值,
library(tidyverse)
out<- df %>% group_by(Bins) %>% summarise(x=mean(x),y=mean(y)) %>% as.data.frame()
为了将我们的结果与 ggplot2
的 stat_summary_bin()
函数进行比较,我们可以将它们绘制在一起,
(ggplot(df, aes(x=x,y=y)) +
geom_point(alpha = 0.4) +
stat_summary_bin(fun='mean', bins=20,
color='orange', size=2, geom='point') +
geom_point(data = out,color="green"))
# green dots are the points we calculated. They are perfectly matching.
现在,要计算方差,我们可以简单地遵循与 var()
函数相同的过程。所以,
df %>% group_by(Bins) %>% summarise(Varx=var(x),Vary=var(y)) %>% as.data.frame()
给出分箱数据的方差。请注意,由于 x 轴被合并,x 的方差几乎为零。所以,这里重要的是 y 轴的方差。
分箱数据的方差让我们模拟了数据的 heteroscedasticity。
分箱均值的路径也显示了数据的模式。所以你的数据有一个积极的趋势。 (不需要看到完美的平滑线)。但它变弱了,因为你建议的方法不同。
数据:
set.seed(42)
x <- runif(1000)
y <- x^2 + x + 4 * rnorm(1000)
df <- data.frame(x=x, y=y)
注意: 数据和一些 ggplot2 代码取自 OP 引用的 question.
我正在尝试根据样本绘制模拟结果。因此,我有很多数据点 - 所以我选择了分箱散点图。其中一篇论文建议绘制分箱图,以便通过计算彩色点的方差来计算一阶效应。 我的情节是这样的:
我从这里使用了这个情节的代码: making binned scatter plots for two variables in ggplot2 in R
不过,我不太懂怎么解读剧情。我知道彩色点是 bin 的平均值,但它实际上告诉我们有关数据的什么信息以及如何进一步计算这些黄色点的方差?
我们能否从这个图中暗示变量显示(弱)线性关系,即使一些黄色点并没有真正遵循趋势?
提前致谢!
我们可以通过cut()
函数对数据进行分箱,如下,
mybin <- cut(df$x,20,include.lowest=TRUE,right = FALSE)
df$Bins <- mybin
然后计算分箱数据的平均值,
library(tidyverse)
out<- df %>% group_by(Bins) %>% summarise(x=mean(x),y=mean(y)) %>% as.data.frame()
为了将我们的结果与 ggplot2
的 stat_summary_bin()
函数进行比较,我们可以将它们绘制在一起,
(ggplot(df, aes(x=x,y=y)) +
geom_point(alpha = 0.4) +
stat_summary_bin(fun='mean', bins=20,
color='orange', size=2, geom='point') +
geom_point(data = out,color="green"))
# green dots are the points we calculated. They are perfectly matching.
现在,要计算方差,我们可以简单地遵循与 var()
函数相同的过程。所以,
df %>% group_by(Bins) %>% summarise(Varx=var(x),Vary=var(y)) %>% as.data.frame()
给出分箱数据的方差。请注意,由于 x 轴被合并,x 的方差几乎为零。所以,这里重要的是 y 轴的方差。
分箱数据的方差让我们模拟了数据的 heteroscedasticity。
分箱均值的路径也显示了数据的模式。所以你的数据有一个积极的趋势。 (不需要看到完美的平滑线)。但它变弱了,因为你建议的方法不同。
数据:
set.seed(42)
x <- runif(1000)
y <- x^2 + x + 4 * rnorm(1000)
df <- data.frame(x=x, y=y)
注意: 数据和一些 ggplot2 代码取自 OP 引用的 question.