4

我想通过 scatterplot3d 绘制响应面,但以下代码通过错误。

library(rsm)
swiss2.lm <- lm(Fertility ~ poly(Agriculture, Education, degree = 2), data = swiss)
persp(swiss2.lm, Education ~ Agriculture, zlab = "Fertility")

library(scatterplot3d)
s3d <- 
  scatterplot3d(
      swiss
   # , type = "h"
    , highlight.3d = TRUE
    , angle = 55
    , scale.y = 0.7
    , pch = 16
     )

s3d$plane3d(swiss2.lm, lty.box = "solid")

如果您能帮助解决这个问题,我将不胜感激。谢谢

开斋节

Error in segments(x, z1, x + y.max * yx.f, z2 + yz.f * y.max, lty = ltya,  : 
  cannot mix zero-length and non-zero-length coordinates

我正在使用图书馆中的swiss数据。rsm

4

1 回答 1

6

您对使用的依恋程度如何scatterplot3d?如果你愿意这样做,rgl这很容易。按照您的示例:

设置均匀间隔的网格并进行预测:

newdat <- expand.grid(Education=seq(0,50,by=5),
            Agriculture=seq(0,100,by=10))
newdat$pp <- predict(swiss2.lm,newdata=newdat)

绘制点并添加曲面:

library(rgl)
with(swiss,plot3d(Agriculture,Education,Fertility))
with(newdat,surface3d(unique(Agriculture),unique(Education),pp,
                      alpha=0.3,front="line"))
rgl.snapshot("swiss.png")

在此处输入图像描述

rgl有一些优点(隐藏线移除、照明效果、动态旋转和缩放)和一些缺点(不太适合基本包布局等;更难操作字体,包括plotmath方程式等;更难调整标签位置和情节风格)。包中的scatter3d函数car具有一些不错的功能,可以将回归曲面添加到rgl绘图中,但据我所知,它可以使用加法模型,但不允许二次多项式模型......

据我所知,为了在scatterplot3d框架中执行此操作,您必须构造与回归曲面中的四边形相对应的点并使用xyz.convertsegments绘制它们......

于 2012-11-26T22:24:20.113 回答