如何在 coplot 中绘制回归或 LOWESS 线?

4
通常在数据上绘制一条线(例如拟合的回归线或非参数LOWESS线)很有帮助。同样,当变量混淆时,将x1、y数据按x2分层绘制也很有帮助。然而,我无法弄清楚如何使用?coplot同时结合两者。这在lattice中应该是很自然的,但我似乎也无法弄清楚如何在那里做到这一点。
以下提供了一些可供使用的数据:
library(MASS)
set.seed(7422)
X <- mvrnorm(100, mu=c(5,5), Sigma=rbind(c(2.0, 1.9),
                                         c(1.9, 2.0) ) )
x1 <- X[,1];  x2 <- X[,2]
y <- 3 + .6*x1 - .4*x2 + rnorm(100)
m <- lm(y~x1+x2)
summary(m)$coefficients
#               Estimate Std. Error   t value     Pr(>|t|)
# (Intercept)  3.8281801  0.4022204  9.517619 1.476519e-15
# x1           0.5466495  0.2060269  2.653292 9.314673e-03
# x2          -0.4835804  0.2139542 -2.260205 2.604451e-02
windows()
  pairs(cbind(y, x1, x2))
xs <- seq(1.6, 9.2, by=.1)
windows()
  plot(y~x2)
  lines(xs, predict(m, data.frame(x1=5.2, x2=xs)), col="blue")
windows()
  coplot(y~x2|x1)
  ## doesn't work (lines on plot were drawn by hand)
  # lines(xs, predict(m, data.frame(x1=mean(x1[subscripts], x2=xs)), col="blue")
  # lines(lowess(y~x2, subset=x1[subscripts]), col="gray")

原始数据的散点矩阵:

scatterplot matrix of the raw data

这是一个关于 x2y 的边缘图,带有回归线和低通滤波线。这会让不懂统计学的人感到奇怪。

marginal plot of x2 vs y, with fitted regression line and marginal LOWESS

这是我想到的内容。它是一个 coplot,每个分层数据都拟合了回归模型和 LOWESS 线,并绘制在每个面板内。

coplot with regression lines and conditional LOWESSes overlaid

1个回答

3
要使用coplot实现这一点,您需要定义自己的面板函数。默认函数是points,它只是绘制点,但您可以使用一个简单的函数添加回归线和lowess曲线。
PointsWithReg = function(x, y, pch=20, col=1, ...) {
    points(x=x, y=y, col=col, pch=pch, type="p", ...)
    abline(lm(y ~ x))
    lines(lowess(x=x, y=y), col="blue")
}

coplot(y~x2|x1, panel=PointsWithReg, pch=16)

Coplot with regression line and lowess


谢谢,有没有方便的方法可以修改这个模型,使得回归线在每个面板中绘制,而不是对数据的每个分层进行新的回归拟合?斜率应该很简单,因为它在任何地方都是相同的(至少在这种情况下,没有交互作用),但截距需要根据每个分层内x1的平均值进行偏移。 - gung - Reinstate Monica

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