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
首先应该注意的是,系数a
、b
、c
和d
对于给定的平面在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
希望对您有所帮助。
我的问题很天真,但我试图理解一些东西: 我有一些 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
首先应该注意的是,系数a
、b
、c
和d
对于给定的平面在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
希望对您有所帮助。