回归线的热图
Heatmap of regression lines
假设我 运行 一个贝叶斯简单线性回归。我想通过基于 a(截距)和 b(斜率)的后验分布绘制多条回归线来可视化结果。我想知道如何以类似热图的样式显示结果,或者使用透明度来避免重叠。这是一种简单的 ggplot 方法。
library(ggplot2)
set.seed(123)
N = 1000
x = 1:80
a = rnorm(N,10,3)
b = rnorm(N,5,2)
y = vector("list",length=N)
for(i in 1:N) {y[[i]] = a[i]+b[i]*x}
df = data.frame(x=rep(x,N),y=unlist(y))
df$f = rep(1:N,each=80)
(plt <- ggplot(df, aes(x, y,group=f)) +
geom_jitter(alpha=1/30,width=5,col="blue") + theme_classic())
有更好的方法吗?如果颜色会根据重叠量而改变(就像在热图中一样),那就太好了。
为什么不用后验样本绘制线图
g = ggplot(df, aes(x, y)) +
geom_line(alpha=1/50,col="grey",aes(group=f)) +
theme_classic()
然后为后验期望添加一条较暗的线
g + stat_summary(geom="line", fun.y=mean, color="black", lwd=1)
给予
另一种方法是通过 stat_density_2d
函数和 ggplot2
。有多种方法可以做到这一点。使用您的 df
...
作为热图
ggplot(df, aes(x = x, y=y))+
stat_density_2d(aes(fill = ..density..), geom = "raster", contour = FALSE)+
scale_fill_gradient(low = "blue", high = "red")+
stat_summary(geom="line", fun.y=mean, color = "white",lwd=1)+
theme_classic()
反之,您也可以使用积分。
ggplot(df, aes(x = x, y=y))+
stat_density_2d(aes(size = ..density..), geom = "point", contour = FALSE)+
stat_summary(geom="line", fun.y=mean, color = "white",lwd=1)+
theme_classic()
假设我 运行 一个贝叶斯简单线性回归。我想通过基于 a(截距)和 b(斜率)的后验分布绘制多条回归线来可视化结果。我想知道如何以类似热图的样式显示结果,或者使用透明度来避免重叠。这是一种简单的 ggplot 方法。
library(ggplot2)
set.seed(123)
N = 1000
x = 1:80
a = rnorm(N,10,3)
b = rnorm(N,5,2)
y = vector("list",length=N)
for(i in 1:N) {y[[i]] = a[i]+b[i]*x}
df = data.frame(x=rep(x,N),y=unlist(y))
df$f = rep(1:N,each=80)
(plt <- ggplot(df, aes(x, y,group=f)) +
geom_jitter(alpha=1/30,width=5,col="blue") + theme_classic())
有更好的方法吗?如果颜色会根据重叠量而改变(就像在热图中一样),那就太好了。
为什么不用后验样本绘制线图
g = ggplot(df, aes(x, y)) +
geom_line(alpha=1/50,col="grey",aes(group=f)) +
theme_classic()
然后为后验期望添加一条较暗的线
g + stat_summary(geom="line", fun.y=mean, color="black", lwd=1)
给予
另一种方法是通过 stat_density_2d
函数和 ggplot2
。有多种方法可以做到这一点。使用您的 df
...
作为热图
ggplot(df, aes(x = x, y=y))+
stat_density_2d(aes(fill = ..density..), geom = "raster", contour = FALSE)+
scale_fill_gradient(low = "blue", high = "red")+
stat_summary(geom="line", fun.y=mean, color = "white",lwd=1)+
theme_classic()
反之,您也可以使用积分。
ggplot(df, aes(x = x, y=y))+
stat_density_2d(aes(size = ..density..), geom = "point", contour = FALSE)+
stat_summary(geom="line", fun.y=mean, color = "white",lwd=1)+
theme_classic()