Как добавить линии регрессии к фасетам xyplot - PullRequest
0 голосов
/ 17 октября 2019

Я выполняю линейную регрессию для разных групп (содержится в столбце grp), используя веса, указанные в столбце wght. Это работает очень хорошо.

by_time_frame <- group_by(df, grp)
weighted_model <- do(by_time_frame, tidy(lm(y~x, weights=wght, data=.)))

Однако я не могу построить (взвешенную) линию регрессии для каждой группы на точечных диаграммах:

xyplot(y ~ x | grp, data=df, main='Original Data'),
       panel = function(x, y) {
           panel.xyplot(x, y)
           panel.abline(summary(weighted_model))
           }
       )

xyplot

1 Ответ

1 голос
/ 17 октября 2019

Рассмотрим базовые R by для построения групповых регрессий:

wgt_models <- by(df, df$grp, function(sub_df) 
                    lm(y ~ x, weights = wght, data = sub_df)
              )

Затем выполните итерацию по списку с for, чтобы добавить panel.abline слоев, и сделайте это без summary():

xyplot(y ~ x | grp, data= df, main = 'Original Data'),
     panel = function(x, y) {
        panel.xyplot(x, y)
        for (m in wgt_models) panel.abline(m)
     }
)

Потенциально, вы можете вызвать by внутри, так как это тоже цикл, особенно примените семейный цикл:

xyplot(y ~ x | grp, data= df, main = 'Original Data'),
     panel = function(x, y) {
        panel.xyplot(x, y)
        by(df, df$grp, function(sub_df) 
             panel.abline(lm(y ~ x, weights = wght, data = sub_df))
        )
     }
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...