2013-07-04 3 views
0

Я работаю с несколькими линейными регрессиями.Как создать участок 3D-поверхности в R?

У меня есть выход z, являющийся результатом взаимодействия x * y.

Я хотел бы создать поверхностный график этих данных, но не повезло. Я пробовал коммандос wireframe и persp, но мне кажется, что я еще не умею разрабатывать свои коммандос.

Я создал красивый scatterplot3d, но как я могу создать поверхностный график с теми же данными?

+0

Welcom к SO. Даже если вы получите ответ, прочитайте это: [Как сделать отличный пример воспроизведения R?] (Http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – agstudy

+0

Возможный дубликат [Plot Regression Surface] (http://stackoverflow.com/questions/7863906/plot-regression-surface), а также поиск SO для 'scatter3d', который предлагает возможность графики rgl с точками и поверхностью, а не статические версии, предоставленные 'scatterplot3d' –

ответ

4

Я предполагаю, что вы знаете, что вы делаете, когда говорите, что вы установили 3D-поверхность в линейной регрессии. То, что persp и wireframe expect - это сетка значений x и y, а также предсказанные z-высоты в каждой из этих точек сетки. Вы можете сгенерировать это с помощью expand.grid. Вот примерный пример.

preddf <- expand.grid(x=seq(xmin, xmax, len=51), 
         y=seq(ymin, ymax, len=51)) 

preddf$z <- predict(model, preddf) 

persp(preddf) 

Заменить xmin, xmax, ymin и ymax с диапазонами ваших предсказателей, и 51 с желаемым размером/плотность вашей сетки.

3

Другая альтернатива expand.grid заключается в использовании outer, это быстрее.

Использование @HongOoi данных:

z <- outer(x,y, function(x,y) 
    predict(mod,data.frame(x=x,y=y))) 
persp(x,y,z) 
Смежные вопросы