Преамбула
Прежде чем углубляться в объяснение, позвольте мне отослать вас к этому вопросу: Почему не рекомендуется использовать метод attach () в R, и что следует делатьЯ использую вместо этого?
Хотя рекомендуется сделать ваш вопрос воспроизводимым, код, который вы использовали, можно сделать с некоторой очисткой.Например:
- Не включать пакеты, которые не используются в коде (я не видел необходимости в пакете
lme4
); - Нет необходимостииспользовать
data(...)
для загрузки MathAchieve
.Подробнее см. В разделе «Рекомендации» из ?data
. - Как уже упоминалось выше, не используйте
attach()
. - . Для полной воспроизводимости используйте
set.seed()
перед произвольнымвыборка. - Для примера минимальный не наносите на график 20 школ, если их будет меньше.
Поскольку вы используете один из пакетов tidyverseдля построения графика я рекомендую еще один из его коллекции для манипулирования данными:
library(nlme)
library(ggplot2)
library(lattice)
library(dplyr)
Bryk <- MathAchieve %>%
select(School, SES, MathAch) %>%
group_by(School) %>%
mutate(meanses = mean(SES),
cses = SES - meanses) %>%
ungroup() %>%
left_join(MathAchSchool %>% select(School, Sector),
by = "School")
colnames(Bryk) <- tolower(colnames(Bryk))
set.seed(123)
cat <- sample(unique(Bryk$school[Bryk$sector == "Catholic"]), 2)
Cat.2 <- groupedData(mathach ~ ses | school,
data = Bryk %>% filter(school %in% cat))
Пояснение
Теперь, когда это не так, давайте рассмотрим соответствующие функции дляloess
:
от ?panel.loess
:
panel.loess(x, y, span = 2/3, degree = 1,
family = c("symmetric", "gaussian"),
... # omitted for space
)
от ?stat_smooth
:
stat_smooth(mapping = NULL, data = NULL, geom = "smooth",
method = "auto", formula = y ~ x, span = 0.75, method.args = list(),
... # omitted for space
)
, где method = "auto"
по умолчанию loess
от *Пакет 1051 * для <1000 наблюдений. </p>
из ?loess
:
loess(formula, data, span = 0.75, degree = 2,
family = c("gaussian", "symmetric"),
... #omitted for space
)
Короче говоря, параметры по умолчанию для лессового графика span = 2/3, degree = 1, family = "symmetric"
для пакета lattice
и span = 0.75, degree = 2, family = "gaussian"
для пакета ggplot2
. Вы должны указать совпадающие параметры, если хотите, чтобы получающиеся графики совпали :
xyplot(mathach ~ ses | school, data = Cat.2, main = "Catholic",
panel=function(x, y) {
panel.loess(x, y, span=1, col = "red") # match ggplot's colours
panel.xyplot(x, y, col = "black") # to facilitate comparison
panel.lmline(x, y, lty=2, col = "blue")
})
ggplot(Cat.2, aes(x = ses, y = mathach)) +
geom_point(size = 2, shape = 1) +
stat_smooth(method = "lm", se = F)+
stat_smooth(span = 1,
method.args = list(degree = 1, family = "symmetric"),
colour = "red", se = F)+
facet_wrap(school ~ .) +
theme_classic() # less cluttered background to facilitate comparison