使用拟合值和预测值的 3D 图之间的差异
Difference between 3D plots using fitted and predicted values
我有两个 3D 图,一个是使用库 p3d
(左侧)使用拟合值绘制的。在第二个中,我使用了 predict
,然后是包 akima
中的 interp
命令,并使用 persp
绘制(右侧)。图像显示的角度不同,但这是我发现显示一个平面而另一个有曲线的最佳方式。
我想知道为什么显示拟合值的图表有一条曲线而另一个显示预测值的图表没有。
第一图代码:
library(p3d)
Init3d(family="serif", cex = 1)
Plot3d( TCL ~ reLDM+yr, nest6)
Axes3d()
fit = lm( TCL ~ reLDM+yr+I(yr^2)+I(reLDM*yr)+I(reLDM*yr^2), nest6)
Fit3d( fit )
第二个图形代码:
library(akima)
x <- nest6$reLDM
y <- nest6$yr
y2 <- y^2
z <- nest6$TCL
m <- lm(z ~ x*y+y2+x:y2)
i <- 25
xtemp <- seq(min(x),max(x),length.out=i)
xrange <- rep(xtemp,times=i)
ytemp <- seq(min(y),max(y),length.out=i)
yrange <- rep(ytemp,each=i)
y2temp <- seq(min(y2),max(y2),length.out=i)
y2range <- rep(y2temp,each=i)
newdata <- data.frame(x=xrange,y=yrange,y2=y2range)
zhat <- predict(m,newdata=newdata)
xyz <- interp(xrange,yrange,zhat)
jet.colors <- colorRampPalette( c("yellow", "red", "blue") )
nbcol <- 500
color <- jet.colors(nbcol)
nrz <- length(xyz[[1]])
ncz <- length(xyz[[2]])
z<-xyz[[3]]
zfacet <- z[-1, -1] + z[-1, -ncz] + z[-nrz, -1] + z[-nrz, -ncz]
facetcol <- cut(zfacet, nbcol)
quartz()
persp(xyz,xlab="x",ylab="y",zlab="z", cex.lab = 1,cex.axis = 1,
theta = 35, phi = 50,col=color[facetcol], border="grey40", ticktype = "detailed", zlim=c(1,7))
你会在这个 link 中找到数据集,它很大,所以不可能在这里 post 它:https://www.dropbox.com/s/czdascoq02alm46/TCL16_26.csv?dl=0
我的模型是使用 lm() 完成的,我在 post 中读到,在简单的线性回归模型中,拟合函数和预测函数之间没有区别。但是,在 akima 中,我正在使用 interp 命令,据我所知,它估计两个已知数据点之间的值(基本上填补了缺失的数据空白)。
我发现的另一个区别是预测值图使用原始数据集中最大和最小值范围内的新数据。对于拟合值,每个观察值有一个值。
我很难向我的主管解释这件事,他认为这是不够的理由。有什么更好的解释为什么第二张图中没有曲线?
替换
y2temp <- seq(min(y2),max(y2),length.out=i)
与
y2temp <- ytemp^2
你会得到类似的曲线。
使用模拟数据:
我有两个 3D 图,一个是使用库 p3d
(左侧)使用拟合值绘制的。在第二个中,我使用了 predict
,然后是包 akima
中的 interp
命令,并使用 persp
绘制(右侧)。图像显示的角度不同,但这是我发现显示一个平面而另一个有曲线的最佳方式。
我想知道为什么显示拟合值的图表有一条曲线而另一个显示预测值的图表没有。
第一图代码:
library(p3d)
Init3d(family="serif", cex = 1)
Plot3d( TCL ~ reLDM+yr, nest6)
Axes3d()
fit = lm( TCL ~ reLDM+yr+I(yr^2)+I(reLDM*yr)+I(reLDM*yr^2), nest6)
Fit3d( fit )
第二个图形代码:
library(akima)
x <- nest6$reLDM
y <- nest6$yr
y2 <- y^2
z <- nest6$TCL
m <- lm(z ~ x*y+y2+x:y2)
i <- 25
xtemp <- seq(min(x),max(x),length.out=i)
xrange <- rep(xtemp,times=i)
ytemp <- seq(min(y),max(y),length.out=i)
yrange <- rep(ytemp,each=i)
y2temp <- seq(min(y2),max(y2),length.out=i)
y2range <- rep(y2temp,each=i)
newdata <- data.frame(x=xrange,y=yrange,y2=y2range)
zhat <- predict(m,newdata=newdata)
xyz <- interp(xrange,yrange,zhat)
jet.colors <- colorRampPalette( c("yellow", "red", "blue") )
nbcol <- 500
color <- jet.colors(nbcol)
nrz <- length(xyz[[1]])
ncz <- length(xyz[[2]])
z<-xyz[[3]]
zfacet <- z[-1, -1] + z[-1, -ncz] + z[-nrz, -1] + z[-nrz, -ncz]
facetcol <- cut(zfacet, nbcol)
quartz()
persp(xyz,xlab="x",ylab="y",zlab="z", cex.lab = 1,cex.axis = 1,
theta = 35, phi = 50,col=color[facetcol], border="grey40", ticktype = "detailed", zlim=c(1,7))
你会在这个 link 中找到数据集,它很大,所以不可能在这里 post 它:https://www.dropbox.com/s/czdascoq02alm46/TCL16_26.csv?dl=0
我的模型是使用 lm() 完成的,我在 post 中读到,在简单的线性回归模型中,拟合函数和预测函数之间没有区别。但是,在 akima 中,我正在使用 interp 命令,据我所知,它估计两个已知数据点之间的值(基本上填补了缺失的数据空白)。
我发现的另一个区别是预测值图使用原始数据集中最大和最小值范围内的新数据。对于拟合值,每个观察值有一个值。
我很难向我的主管解释这件事,他认为这是不够的理由。有什么更好的解释为什么第二张图中没有曲线?
替换
y2temp <- seq(min(y2),max(y2),length.out=i)
与
y2temp <- ytemp^2
你会得到类似的曲线。
使用模拟数据: