如何在coplot中的数据上绘制回归线或LOWESS线

时间:2018-11-09 20:56:55

标签: r plot loess

在数据上绘制一条线(例如,拟合的回归线或非参数LOWESS线)通常会很有帮助。同样,当变量混淆时,绘制x1,y2分层的y数据通常会很有帮助。但是,我还不太清楚如何使用?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的边际图,拟合了回归线,并在数据顶部绘制了边际LOWESS线。对于统计上不精通的人来说,这看起来很奇怪。

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

这就是我的想法。这是一个coplot,具有回归模型和一条LOWESS线,适合各面板内部绘制的数据的每个层次。

coplot with regression lines and conditional LOWESSes overlaid

1 个答案:

答案 0 :(得分:1)

要使用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) 进行此操作,您需要定义自己的 panel函数。默认函数是init,它仅绘制点,但是您可以使用简单函数添加回归线和最低曲线。

val numbers = List(1, 2, 3, 4, 5)

val result = numbers.init
println(result)

Coplot with regression line and lowess