Подтвердить что ты не робот

Построение графика xyplot с линией регрессии на графике решетки

Я загрузил пакет решетки. Затем я запускаю:

> xyplot(yyy ~ xxx | zzz, panel = function(x,y) { panel.lmline(x,y)}

Это создает панели сюжета, показывающие линию регрессии, без xyplots. Я делаю panel.lmline без полного понимания того, как это делается. Я знаю, что есть аргумент данных, каковы данные, зная, что у меня есть 3 переменные xxx, yyy, zzz?

4b9b3361

Ответ 1

Все, что вам действительно нужно:

xyplot(yyy ~ xxx | zzz, type = c("p","r"))

где аргумент type задокументирован в ?panel.xyplot

Я не буду приводить все это, кроме

type: character vector consisting of one or more of the following:
      ‘"p"’, ‘"l"’, ‘"h"’, ‘"b"’, ‘"o"’, ‘"s"’, ‘"S"’, ‘"r"’,
      ‘"a"’, ‘"g"’, ‘"smooth"’, and ‘"spline"’.  If ‘type’ has more
      than one element, an attempt is made to combine the effect of
      each of the components.

      The behaviour if any of the first six are included in ‘type’
      is similar to the effect of ‘type’ in ‘plot’ (type ‘"b"’ is
      actually the same as ‘"o"’).  ‘"r"’ adds a linear regression
      line (same as ‘panel.lmline’, except for default graphical
      parameters). ‘"smooth"’ adds a loess fit (same as
      ‘panel.loess’).  ‘"spline"’ adds a cubic smoothing spline fit
      (same as ‘panel.spline’).  ‘"g"’ adds a reference grid using
      ‘panel.grid’ in the background (but using the ‘grid’ argument
      is now the preferred way to do so).  ‘"a"’ has the effect of
      calling ‘panel.average’, which can be useful for creating
      interaction plots.  The effect of several of these
      specifications depend on the value of ‘horizontal’.

Вы можете, как я показал выше, добавить их последовательно, передав type вектор символов. По существу, ваш код дал тот же результат, что и type = "r", т.е. только. Была создана линия регрессии.

Аргумент panel аргумента xyplot и функции построения решетки вообще, чрезвычайно эффективен, но не всегда требуется для столь сложных вещей. В основном вам нужно передать panel функцию, которая будет рисовать объекты на каждой панели сюжета. Чтобы изменить код, чтобы сделать то, что вы хотели, нам нужно добавить вызов panel.xyplot(). Например:.

xyplot(yyy ~ xxx | zzz,
       panel = function(x, y, ...) {
                 panel.xyplot(x, y, ...)
                 panel.lmline(x, y, ...)
               })

Также очень полезно передавать все остальные аргументы по отдельным функциям панели через ..., и в этом случае вам нужно ... в качестве аргумента в ваших анонимных функциях (как показано выше). Фактически, вы, вероятно, можете написать эту функциональную часть панели как:

xyplot(yyy ~ xxx | zzz,
       panel = function(...) {
                 panel.xyplot(...)
                 panel.lmline(...)
               })

но я обычно добавляю аргументы x и y только для того, чтобы быть ясным.