绘制回归曲面

10
我正在阅读 Cohen、Cohen、Aiken 和 West(2003)的一本书,名为“应用多元回归相关分析于行为科学”,在第259页上看到了一个显示交互作用和非交互作用的回归面的三维图表。这些图表似乎是使用 R 创建的。我喜欢这些图表作为教学工具,并想要重新创建它们。这些图表看起来像这样: enter image description here Cohen等人的图表中唯一额外的部分是在x2的均值、+1sd和=1sd处添加的线条。如果可能的话,这将是一个很好的补充(通常大多数事情都可以使用R实现)。
我提供了一个包含一个独立变量、两个预测变量和居中预测变量的数据集示例。我该如何使用R生成回归面(平面)图表,同时显示交互作用和加法模型,以展示居中和非居中数据(我假设技术方法将相同,但想确认一下)。
总共4个图表: 1. 非居中无交互作用 2. 非居中交互作用 3. 居中无交互作用 4. 居中交互作用
DF<-structure(list(y = c(-1.22, -1.73, -2.64, -2.44, -1.11, 2.24, 
3.42, 0.67, 0.59, -0.61, -10.77, 0.93, -8.6, -6.99, -0.12, -2.29, 
-5.16, -3.35, -3.35, -2.51, 2.21, -1.18, -5.21, -7.74, -1.34), 
    x1 = c(39.5, 41, 34, 30.5, 31.5, 30, 41.5, 24, 43, 39, 25.5, 
    38.5, 33.5, 30, 41, 31, 25, 37, 37.5, 24.5, 38, 37, 41, 37, 
    36), x2 = c(61L, 53L, 53L, 44L, 49L, 44L, 57L, 47L, 54L, 
    48L, 46L, 59L, 46L, 61L, 55L, 57L, 59L, 59L, 55L, 50L, 62L, 
    55L, 55L, 52L, 55L), centered.x1 = c(5.49702380952381, 6.99702380952381, 
    -0.0029761904761898, -3.50297619047619, -2.50297619047619, 
    -4.00297619047619, 7.49702380952381, -10.0029761904762, 8.99702380952381, 
    4.99702380952381, -8.50297619047619, 4.49702380952381, -0.50297619047619, 
    -4.00297619047619, 6.99702380952381, -3.00297619047619, -9.00297619047619, 
    2.99702380952381, 3.49702380952381, -9.50297619047619, 3.99702380952381, 
    2.99702380952381, 6.99702380952381, 2.99702380952381, 1.99702380952381
    ), centered.x2 = c(9.80357142857143, 1.80357142857143, 1.80357142857143, 
    -7.19642857142857, -2.19642857142857, -7.19642857142857, 
    5.80357142857143, -4.19642857142857, 2.80357142857143, -3.19642857142857, 
    -5.19642857142857, 7.80357142857143, -5.19642857142857, 9.80357142857143, 
    3.80357142857143, 5.80357142857143, 7.80357142857143, 7.80357142857143, 
    3.80357142857143, -1.19642857142857, 10.8035714285714, 3.80357142857143, 
    3.80357142857143, 0.803571428571431, 3.80357142857143)), .Names = c("y", 
"x1", "x2", "centered.x1", "centered.x2"), row.names = c(NA, 
25L), class = "data.frame")

提前感谢。

编辑:以下代码可以绘制平面,但对于具有交互作用的情况(这才是我真正感兴趣的),它不起作用。此外,我也不知道如何绘制x2的高(+1sd)、低(-1sd)和均值。

x11(10,5)
 s3d <- scatterplot3d(DF[,c(2,3,1)], type="n", highlight.3d=TRUE,
      angle=70, scale.y=1, pch=16, main="scatterplot3d")

   # Now adding a regression plane to the "scatterplot3d"
    my.lm <-  with(DF, lm(y ~ x1 + x2))
 s3d$plane3d(my.lm, lty.box = "solid")

尝试绘制交互平面(如下所示):

s3d <- scatterplot3d(DF[,c(2,3,1)], type="n", highlight.3d=TRUE,
      angle=70, scale.y=1, pch=16, main="scatterplot3d")

    my.lm <-  with(DF, lm(y ~ x1 + x2 + x1:x2 ))
 s3d$plane3d(my.lm, lty.box = "solid")

出现了以下错误:

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

我认为R Commander中可能有类似这样的功能... - Ben Bolker
1个回答

14

下面是我会使用“rms”和“lattice”包的一种方法(添加了一些颜色):

require(rms)  # also need to have Hmisc installed
require(lattice)
ddI <- datadist(DF)
options(datadist="ddI")
lininterp <- ols(y ~ x1*x2, data=DF)
 bplot(Predict(lininterp, x1=25:40, x2=45:60), 
       lfun=wireframe,  # bplot passes extra arguments to wireframe
       screen = list(z = -10, x = -50), drape=TRUE)

在此输入图片描述

还有非交互模型:

 bplot(Predict(lin.no.int, x1=25:40, x2=45:60), lfun=wireframe, col=2:8, drape=TRUE, 
screen = list(z = -10, x = -50),
 main="Estimated regression surface with no interaction")

在此输入图片描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接