将第二个平面添加到scatterplot3d

时间:2015-03-21 22:39:30

标签: r lm surface data-fitting

我想根据父亲+母亲的身高和性别来预测孩子的身高,并想象一下。

如果没有性别变量,我仍然可以在3D图形中看到它。

但是当我添加性别时,我想要有2个表面图,一个用于性别==男性,一个用于性别==女性。是否有一种优雅的方法可以在fit2模型中修复此性别变量,以便我可以绘制两者?

library(fields)
library(scatterplot3d)
library(ggplot2)
library(UsingR)

data(GaltonFamilies)
attach(GaltonFamilies)

fit <- lm(childHeight ~ mother + father)
fit2 <- lm(childHeight ~ mother + father + gender)

colorSet <- tim.colors(2)
s3d <- scatterplot3d(father,mother,childHeight,color=colorSet[gender])

detach(GaltonFamilies)

s3d$plane3d(fit)

scatterplot3d plot

包括性别在内的契合度如下:

> fit2

Call:
lm(formula = childHeight ~ mother + father + gender)

Coefficients:
(Intercept)       mother       father   gendermale  
    16.5212       0.3176       0.3928       5.2150  

但是当我尝试为两个性别绘制两个表面平面时,我得到一个错误:

s3d$plane3d(fit2)

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

我想有这样的事情,有人知道这是怎么回事吗?

s3d$plane3d(fit2(gendermale=1))
s3d$plane3d(fit2(gendermale=0))

1 个答案:

答案 0 :(得分:2)

你需要调整颜色(我刚用过#34;红色&#34;为了演示而在第二架飞机上),但试试这个:

s3d$plane3d(fit2$coefficients[1:3])
s3d$plane3d(fit2$coefficients[1:3] + c(fit2$coefficients["gendermale"], 0, 0), col = "red")

这个想法忽略了第一个平面的gendermale系数(gender=="female"),并将其添加到第二个平面的截距(gender=="male")。

enter image description here