Как построить регрессию или линии LOWESS по данным в coplot

Часто полезно построить линию (например, подобранную линию регрессии или непараметрическую линию LOWESS) по данным. Аналогичным образом, когда переменные смешаны, часто бывает полезно нанести на график данные x1, y, стратифицированные по x2. Однако я не могу понять, как совместить оба метода, используя ?coplot. Это должно быть вполне естественно в решетке, но я могу Там тоже не понял как это сделать.

Ниже приведены некоторые данные для игры:

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")

Матрица рассеяния исходных данных:

матрица диаграммы рассеяния необработанных данных

Вот предельный график зависимости x2 от y с подгонкой линии регрессии и предельной линией LOWESS, построенной поверх данных. Это будет выглядеть странно для людей, которые не разбираются в статистике.

предельный график зависимости x2 от y с подобранной линией регрессии и предельным значением LOWESS

Это то, что я имею в виду. Это совместный график с моделью регрессии и линией LOWESS, подходящей для каждого слоя данных, нанесенных на график внутри каждой панели.

coplot с наложенными линиями регрессии и условными LOWESSes


person gung - Reinstate Monica    schedule 09.11.2018    source источник


Ответы (1)


Чтобы сделать это с помощью coplot, вам нужно определить собственную панельную функцию. Функция по умолчанию — points, которая просто отображает точки, но вы можете добавить линию регрессии и кривую минимума с помощью простой функции.

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)

Коплот с линией регрессии и минимумом

person G5W    schedule 09.11.2018
comment
Спасибо, есть ли удобный способ изменить это так, чтобы линия регрессии из модели отображалась на каждой панели, а не новая регрессия, подходящая для каждого слоя данных? Наклон должен быть прямым, так как он будет одинаковым везде (по крайней мере, в этом случае, без взаимодействия), но пересечение должно быть смещено на основе среднего значения x1 w/i для каждой страты. - person gung - Reinstate Monica; 10.11.2018