生成具有预测函数的回归平面

时间:2014-04-02 19:58:08

标签: r regression predict plane r-grid

我想为我的数据绘制一个回归平面:

结构(清单(L = c(96.4155,76.803,71.5615,68.193,65.6975, 74.627,67.82,64.26,62.06,60.35,68.284,63.7,61.04,59.05, 57.56,64.2695,60.69,58.47,56.78,55.42,61.3715,58.27,56.42, 54.91,53.65),a = c(-0.8375,-20.47,-22.1875,-22.6125,-22.5845, -2.2415,-12.91,-16.16,-17.9,-18.77,-2.4,-10.28,-13.64, -15.33,-16.37,-2.4495,-8.66,-11.74,-13.46,-14.55,-2.4645, -7.58,-10.38,-12.06,-13.09),b = c(1.437,-24.5915,-29.3275, -31.892,-33.524,-5.151,-15.22,-19.61,-22.65,-24.8,-6.239, -13.24,-17.11,-19.64,-21.55,-6.7845,-12.18,-15.45,-17.68, -19.47,-7.124,-11.53,-14.38,-16.41,-17.89)),. Name = c(" L", " a"," b"),row.names = c(NA,25L),class =" data.frame")

我尝试了here的示例。这是我的尝试:

L<-X[1:25,2]
a<-X[1:25,3]
b<-X[1:25,4]
mod2 = lm(L~a*b)
open3d()
plot3d(x=a, y=b, z=L, type="s", col="red", size=1)

grd <- expand.grid(x1=a, x2=b )
grd$pred <-predict(mod2, newdata=grd)
persp3d(x=unique(grd[,1]), y=unique(grd[,2]), 
    z=matrix(grd[,3]), add=TRUE, alpha=0.5)

3d-Plot看起来很好,但是对于网格我得到了这个错误:

Error in persp3d.default(x = grd[, 1], y = grd[, 2], z = matrix(grd[,  : 
increasing 'x' and 'y' values expected

我的代码中的问题在哪里,是否有其他方法可以解决我的问题?谢谢你的帮助!

更新

我已经尝试过使用plane3d()但是遇到了这个错误:

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

然而,在寻找其他解决方案后,我发现我的意图是错误的。我正在寻找类似的东西......

data
intention

...但是不知道如何实现它,或者甚至可以通过我对R的实际知识来实现​​。有人有什么想法吗?

UPDATE2:

我已经使用以下代码尝试了scatter3d()函数:

scatter3d(a,b,L,fit="smooth")  

但得到了这个错误:

Error in smooth.construct.tp.smooth.spec(object, dk$data, dk$knots) : 
A term has fewer unique covariate combinations than specified maximum degrees of freedom  

我已经发现,我必须使用choose.k来调整自由度,但是它总是针对gam函数进行解释,我不知道如何在scatter3d函数中使用它。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我想我用一个非常讨厌的解决方案解决了我的问题:

data <- structure(list(L = c(96.4155, 76.803, 71.5615, 68.193, 65.6975, 74.627, 67.82, 64.26,    
62.06, 60.35, 68.284, 63.7, 61.04, 59.05, 57.56, 64.2695, 60.69, 58.47, 56.78, 55.42, 
61.3715, 58.27, 56.42, 54.91, 53.65), a = c(-0.8375, -20.47, -22.1875, -22.6125, 
-22.5845, -2.2415, -12.91, -16.16, -17.9, -18.77, -2.4, -10.28, -13.64, -15.33, -16.37, 
-2.4495, -8.66, -11.74, -13.46, -14.55, -2.4645, -7.58, -10.38, -12.06, -13.09), b = 
c(1.437, -24.5915, -29.3275, -31.892, -33.524, -5.151, -15.22, -19.61, -22.65, -24.8, 
-6.239, -13.24, -17.11, -19.64, -21.55, -6.7845, -12.18, -15.45, -17.68, -19.47, -7.124, 
-11.53, -14.38, -16.41, -17.89)), .Names = c("L", "a", "b"), row.names = c(NA, 25L),
class = "data.frame")

L<-data[1:25,1]
a<-data[1:25,2]
b<-data[1:25,3]
plot3d(a,b,L, col="red", size="3", xlab="a*", ylab="b*", zlab="L*", main=NULL)

#Generate order for quadruplets

a[c(1:64)] <- a[c(1,2,7,6,2,3,8,7,3,4,9,8,4,5,10,9,
                  6,7,12,11,7,8,13,12,8,9,14,13,9,10,15,14,
                  11,12,17,16,12,13,18,17,13,14,19,18,14,15,20,19,
                  16,17,22,21,17,18,23,22,18,19,24,23,19,20,25,24)] 
b[c(1:64)] <- b[c(1,2,7,6,2,3,8,7,3,4,9,8,4,5,10,9,
                  6,7,12,11,7,8,13,12,8,9,14,13,9,10,15,14,
                  11,12,17,16,12,13,18,17,13,14,19,18,14,15,20,19,
                  16,17,22,21,17,18,23,22,18,19,24,23,19,20,25,24)] 
L[c(1:64)] <- L[c(1,2,7,6,2,3,8,7,3,4,9,8,4,5,10,9,
                  6,7,12,11,7,8,13,12,8,9,14,13,9,10,15,14,
                  11,12,17,16,12,13,18,17,13,14,19,18,14,15,20,19,
                  16,17,22,21,17,18,23,22,18,19,24,23,19,20,25,24)] 

quads3d(a[1:64],b[1:64],L[1:64],col="red",alpha=0.5)

是否有任何功能完全相同?