Как построить регрессию или НИЗКИЕ линии над данными в коплоте - PullRequest
0 голосов
/ 09 ноября 2018

Часто полезно построить линию данных (например, подобранную линию регрессии или непараметрическую линию НИЗКОГО значения) поверх данных. Аналогичным образом, когда переменные смешаны, часто полезно построить данные 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")

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

scatterplot matrix of the raw data

Вот предельный график x2 против y, с подогнанной линией регрессии и предельной линией НИЗКОГО, нанесенной поверх данных. Это будет выглядеть странно для людей, которые не являются статистически подкованными.

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

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

coplot with regression lines and conditional LOWESSes overlaid

1 Ответ

0 голосов
/ 10 ноября 2018

Чтобы сделать это с помощью 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)

Coplot with regression line and lowess

...