R 多连续变量回归估计的曲面绘制
我有一个带有分类变量、连续变量和样条曲线的多层次模型。漂亮而复杂。不管怎样,我正试图将模型拟合可视化 例如,以下是一些玩具数据:R 多连续变量回归估计的曲面绘制,r,plot,model,surface,R,Plot,Model,Surface,我有一个带有分类变量、连续变量和样条曲线的多层次模型。漂亮而复杂。不管怎样,我正试图将模型拟合可视化 例如,以下是一些玩具数据: library(lme4) library(rms) library(gridExtra) ## Make model using sleepstudy data head(sleepstudy) # Add some extra vars sleepstudy$group <- factor( sample(c(1,2), nrow(sleepstudy),
library(lme4)
library(rms)
library(gridExtra)
## Make model using sleepstudy data
head(sleepstudy)
# Add some extra vars
sleepstudy$group <- factor( sample(c(1,2), nrow(sleepstudy), replace=TRUE) )
sleepstudy$x1 <- jitter(sleepstudy$Days, factor=5)^2 * jitter(sleepstudy$Reaction)
# Set up a mixed model with spline
fm1 <- lmer(Reaction ~ rcs(Days, 4) * group + (rcs(Days, 4) | Subject), sleepstudy)
# Now add continuous covar
fm2 <- lmer(Reaction ~ rcs(Days, 4) * group + x1 + (rcs(Days, 4) | Subject), sleepstudy)
# Plot fit
new.df <- sleepstudy
new.df$pred1 <- predict(fm1, new.df, allow.new.levels=TRUE, re.form=NA)
new.df$pred2 <- predict(fm2, new.df, allow.new.levels=TRUE, re.form=NA)
g1 <- ggplot(data=new.df, aes(x=Days)) +
geom_line(aes(y=pred1, col=group), size=2) +
ggtitle("Model 1")
g2 <- ggplot(data=new.df, aes(x=Days)) +
geom_line(aes(y=pred2, col=group), size=2) +
ggtitle("Model 2")
grid.arrange(g1, g2, nrow=1)
但是,尽管此命令没有给出错误,但我的绘图为空:
问题:
我发现
线框”或
plot___________________________)曲面所需的数据格式是由x行x列对应z值的y列组成的二维矩阵(我从这个问题中得到了一个提示)。我还意识到我可以使用“expand.grid”制作一个矩阵,覆盖可能的x和y值范围,并使用这些值预测z,如下所示:
days <- 0:9
x1_range <- range(sleepstudy$x1)[2] * c(0.05, 0.1, 0.15, 0.2, 0.25, 0.3)
new.data2 <- expand.grid(Days = days, x1 = x1_range, group = unique(sleepstudy$group) )
new.data2$pred <- predict(fm2, new.data2, allow.new.levels=TRUE, re.form=NA)
结果图:
所以结果图就是我想要的(虽然在这个虚构的例子中不是很有用,但在实际数据中很有用)。我唯一搞不懂的是如何显示两种不同的色阶。我可以完全支持比例,但如果有人知道如何为不同的曲面显示2个比例,请告诉我,我将编辑答案。我使用
plotly::plot\ly
中的(无)得到相同的结果。您没有曲面。这就是问题所在。您的数据在x、y、z上有一个点。查看数据火山
,找出什么可以表示为曲面。你最多可以有一条3d线条。那么,你建议我如何可视化这些回归系数呢?首先,我建议X1
与预测无关。其次,通过查看rgl::plot3d(mydf$Days、mydf$x1、mydf$pred2)
您可能会对可视化有一些想法。p、 如果我能看一下真实的数据,我可能会进一步帮助你;但是,Idk如果可以释放所有数据<代码>绘图::绘图(数据,x=~Days,y=~x1,z=~pred2,type='scatter3d',mode='lines',opacity=1,line=list(width=6,color=“red”,reverscale=FALSE))您可能会发现这也很有帮助。
days <- 0:9
x1_range <- range(sleepstudy$x1)[2] * c(0.05, 0.1, 0.15, 0.2, 0.25, 0.3)
new.data2 <- expand.grid(Days = days, x1 = x1_range, group = unique(sleepstudy$group) )
new.data2$pred <- predict(fm2, new.data2, allow.new.levels=TRUE, re.form=NA)
surf1 <- ( matrix(new.data2[new.data2$group == 1, ]$pred, nrow = length(days), ncol = length(x1_range)) )
surf2 <- ( matrix(new.data2[new.data2$group == 2, ]$pred, nrow = length(days), ncol = length(x1_range)) )
group <- c(rep(1, nrow(surf1)), rep(2, nrow(surf2) ))
plot_ly (z=surf1, x = mets_range, y = ages, type="surface") %>%
add_surface (z = surf2, surfacecolor=surf2,
color=c('red','yellow'))