lm()的输出与R中回归平面方程之间的联系

connection between output of lm() and equation of regression plane in R

我的问题很天真,但我试图理解一些东西: 我有一些 3D 点,我想用 R 计算适合我的数据 3D 点的平面。

library(scatterplot3d)
x<-sample(1:100, 100)
y<-sample(1:100, 100)
z<-sample(1:100, 100)
xyz <- cbind(x,y,z)
s3d <- scatterplot3d(xyz, type="p", highlight.3d=TRUE, angle=55, scale.y=0.7, pch=16, main="test xyz")
# regression plane
reg <- lm(x ~ y + z)
summary(my.lm)

它 returns :

Call:
  lm(formula = x ~ y + z)
Residuals:
   Min      1Q    Median    3Q     Max 
 -51.085 -22.956  -0.801  23.806  51.610 
Coefficients:
               Estimate Std. Error t value Pr(>|t|)    
   (Intercept) 47.34428    8.28049   5.718 1.19e-07 ***
      y         0.11647    0.10163   1.146    0.255    
      z        -0.05398    0.10163  -0.531    0.597    
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 29.04 on 97 degrees of freedom
Multiple R-squared:  0.01826,  Adjusted R-squared:  -0.001985 
F-statistic: 0.9019 on 2 and 97 DF,  p-value: 0.4092

最后我绘制了飞机:

s3d$plane3d(47.34428, 0.11647, -0.05398, lty.box = "solid") #or s3d$plane3d(reg, lty.box = "solid")

但我不知道 know/understandplane3d 如何从这 3 个值生成平面方程...我尝试使用 rgl.planes3d()(参数是 a、b、c 和 d , 方程 ax+by+cz+d=0) 和平面的值不是我期望的... 有人可以帮我吗?

查看 scatterplot3d 的帮助文件,看到 ?scatterplot3d,它说

plane3d 
function which draws a plane into the existing plot: 
  plane3d(Intercept, x.coef = NULL, y.coef = NULL, lty = "dashed", 
  lty.box = NULL, ...). [...]

因此,第一个参数是截距,第二个参数是 x 维度的系数(斜率),第三个参数是 y 维度的系数(斜率)。这也几乎就是你的图表的样子。查看您的输入:47.34428 是截距。 0.11647 是沿 x 轴的斜率,-0.05398 是沿 y 轴的斜率。

例如,目视检查您的图表,您会看到在 x=0 处,平面大约为 45,这与提供的截距 47 非常吻合。x 从 0 到 100 ,你会看到在 x=100 处,平面的值为 47.34428 + 100*0.11647 = 58.99128,如果你观察 z 轴,你会发现它大致在 60 处。 y 轴上的差异很难辨别,因为斜率几乎为零,但我认为你明白了。

这是对@coffeinjunky 详细而有效的回答的跟进。

OP 正在寻找

类型方程形式的平面表示
a*x + b*y + c*z + d = 0

首先应该注意的是,系数abcd对于给定的平面在3D中并不是唯一的,因为我们可以将这个方程乘以任何不等于 0 的实常数并获得等效结果。

因此我们可以自由选择c=1(前提是我们不处理臭名昭著的表面垂直于xy平面的情况)。

现在 scatterplot3D 的输出提供截距,即 z(x=0,y=0) 的值。如果i0是截距,我们立即得到

d = -i0

其他系数很容易通过将 OP 方程重新排列成

来确定
z = -d - a*x - b*y

scatterplot3d的输出提供x方向(sl_x)的斜率(z(x,y))和y方向的斜率(sl_y)。 有

dz/dx = sl_x 

我们得到sl_x= -a,类似地,sl_y = -b

总而言之,一个类型的方程a*x + b*y +c*z +d = 0描述了3D中的平面space由系数给出:

a = -sl_x
b = -sl_y
c = 1
d = -i0

希望对您有所帮助。