【问题标题】:How to plot regression or LOWESS lines over data in coplot如何在 coplot 中的数据上绘制回归线或 LOWESS 线
【发布时间】:2019-04-13 11:06:45
【问题描述】:

在数据上绘制一条线(例如,拟合回归线或非参数 LOWESS 线)通常很有帮助。同样,当变量混淆时,绘制由 x2 分层的 x1、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")

原始数据的散点图矩阵:

这是x2y 的边际图,拟合回归线和在数据顶部绘制的边际LOWESS 线。对于不懂统计的人来说,这看起来很奇怪。

这就是我的想法。这是一个 coplot,回归模型和一条 LOWESS 线拟合到每个面板内绘制的数据的每个层。

【问题讨论】:

    标签: r plot loess


    【解决方案1】:

    要使用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)
    

    【讨论】:

    • 谢谢,有没有一种方便的方法来修改它,以便在每个面板中绘制模型的回归线,而不是适合每个数据层的新回归?斜率应该是直截了当的,因为它在任何地方都是相同的(至少在这种情况下,没有交互),但需要根据 x1 w/i 每个层的平均值来移动截距。
    猜你喜欢
    • 2017-07-27
    • 2016-05-12
    • 2019-10-22
    • 2021-03-18
    • 2022-01-24
    • 2021-11-09
    • 2018-07-10
    • 1970-01-01
    相关资源
    最近更新 更多