Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 多连续变量回归估计的曲面绘制_R_Plot_Model_Surface - Fatal编程技术网

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'))