Мы можем объединить данные с помощью функции 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()
Чтобы сравнить наши результаты с stat_summary_bin()
функция ggplot2
, мы можем построить их вместе,
(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.
Now, to calculate the variance, we can simply follow the same process with the var()
function. So,
df %>% group_by(Bins) %>% summarise(Varx=var(x),Vary=var(y)) %>% as.data.frame()
gives the variance of the binned data. Note that, since the x axis is binned, the variance of x will be almost zero. So,the important one in here is the variance of the y axis actually.
The variances of the binned data gives us a mimic about the гетероскедастичность данных.
Путь к среднему бинну также показывает структуру данных. Так что ваши данные имеют положительную динамику. (Нет необходимости видеть идеальную плавную линию). Но он становится слабее из-за различных средств, как вы предложили.
Данные:
set.seed(42)
x <- runif(1000)
y <- x^2 + x + 4 * rnorm(1000)
df <- data.frame(x=x, y=y)
Примечание: Данные и некоторые коды ggplot2 были взяты из указанного вопроса ОП .