scatterplot3d за повърхност на реакция в R

Искам да изобразя графика на отговорната повърхност чрез 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 библиотека.


person MYaseen208    schedule 26.11.2012    source източник
comment
Каква грешка? Какви данни използвате?   -  person Jeff Allen    schedule 26.11.2012
comment
@JeffAllen: Вижте моите редакции. благодаря   -  person MYaseen208    schedule 26.11.2012
comment
@MYaseen208 Не знам дали това може да помогне, но ако стартирате poly със степен = 1, нямате грешката. swiss2.lm ‹- lm(Плодовитост ~ поли(земеделие, образование, степен = 1), данни = швейцарски)   -  person agstudy    schedule 26.11.2012
comment
Благодаря на @agstudy за вашия коментар и проявения интерес към моя проблем. Всъщност имам нужда от полином от втора степен, така че степента трябва да е 2.   -  person MYaseen208    schedule 26.11.2012


Отговори (1)


Колко сте привързани към използването на 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.convert и segments, за да ги начертаете ...

person Ben Bolker    schedule 26.11.2012