Построение категориальных переменных OLS в R - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь составить график с возрастом по оси X, ожидаемым содержанием сыворотки крови по оси Y и линиями для мужчин / белых, женщин / белых, мужчин / черных, женщин / черных, используя оценки из функция lm ().

goutdata <- read.table("gout.txt", header = TRUE)
goutdata$sex <- factor(goutdata$sex,levels = c("M",  "F"))
goutdata$race <- as.factor(goutdata$race)

fm <- lm(su~sex+race+age, data = goutdata)
summary(fm)
ggplot(fm, aes(x= age, y = su))+xlim(30, 70) + geom_jitter(aes(age,su, colour=age)) + facet_grid(sex~race)

Я пытался использовать функцию facet_wrap () с ggplot для обращения к категориальным переменным, но я хочу создать только один график. Я пробовал комбинацию geom_jitter и geom_smooth, но я не уверен, как использовать geom_smooth () с категориальными переменными. Любая помощь будет оценена.

Данные: https://github.com/gdlc/STT465/blob/master/gout.txt

Ответы [ 2 ]

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

Мы можем использовать interaction() для создания группировок на лету и выполнения OLS прямо в geom_smooth().Здесь они сгруппированы на одном участке:

ggplot(goutdata, aes(age, su, color = interaction(sex, race))) +
  geom_smooth(formula = y~x, method="lm") +
  geom_point() +
  hrbrthemes::theme_ipsum_rc(grid="XY")

enter image description here

и распределены по граням:

ggplot(goutdata, aes(age, su, color = interaction(sex, race))) +
  geom_smooth(formula = y~x, method="lm") +
  geom_point() +
  facet_wrap(sex~race) +
  hrbrthemes::theme_ipsum_rc(grid="XY")

enter image description here

Теперь у вас есть частичный ответ на # 1 из https://github.com/gdlc/STT465/blob/master/HW_4_OLS.md: -)

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

Возможно, вы могли бы использовать geom_smooth() для отображения линий регрессии?

dat <- read.table("https://raw.githubusercontent.com/gdlc/STT465/master/gout.txt", 
                   header = T, stringsAsFactors = F)

library(tidyverse) 

dat %>%
  dplyr::mutate(sex = ifelse(sex == "M", "Male", "Female"),
                race = ifelse(race == "W", "Caucasian", "African-American"),
                group = paste(race, sex, sep = ", ")
                ) %>%
  ggplot(aes(x = age, y = su, colour = group)) +
  geom_smooth(method = "lm", se = F, show.legend = F) +
  geom_point(show.legend = F, position = "jitter", alpha = .5, pch = 16) +
  facet_wrap(~group) +
  ggthemes::theme_few() +
  labs(x = "Age", y = "Expected serum urate level")

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...