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

問題を理解するのを手伝っていただければ幸いです。ありがとう

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

図書館の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 に答える