2012-11-26 84 views
2

我想通過scatterplot3d對響應曲面進行圖形繪製,但通過錯誤執行以下代碼。scatterplot3d R中的響應曲面

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

如果您能幫助解決問題,我將非常感激。由於

Eidt

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 

我使用的是從rsmswiss數據。

+0

什麼錯誤?你使用什麼數據? –

+0

@JeffAllen:查看我的編輯。 Thasnks – MYaseen208

+0

@ MYaseen208我不知道這是否可以提供幫助,但是如果您運行的聚合度爲1,那麼您沒有錯誤。 swiss2.lm < - lm(生育〜聚(農業,教育,學位= ** 1 **),數據=瑞士) – agstudy

回答

5

你是否附加使用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") 

enter image description here

rgl有一定的優勢(隱藏線去除,照明效果,動態旋轉和縮放)以及一些缺點(不適合基本包裝層次等等。難以操縱字體,包括plotmath方程等;難以調整標籤的位置和繪圖風格)。在car包中的scatter3d函數添加回歸表面的rgl陰謀一些不錯的功能,但據我可以看到它做加法模型,但不允許二次多項式模型...

據正如我所看到的,爲了在scatterplot3d框架中做到這一點,您將不得不構建迴歸曲面中對應於四邊形的點,並使用xyz.convertsegments來繪製它們...