Добавление точки к фасету - PullRequest
0 голосов
/ 08 марта 2019

Сначала библиотеки

library(tidyr)
library(leaps)
library(ggplots2)
library(ggdark)

Значение модели

set.seed(1)
X = rnorm(100)
e = rnorm(100)
Y = 8 + 7*X + 2.5*X^2 - 9*X^3 + e

Подгонка

data.all = data.frame(Y,X)
regfit.full = regsubsets(Y~poly(X,10,raw=T), data=data.all, nvmax=10)
(reg.summary = summary(regfit.full))

Затем я получаю минимальное значение для каждой переменной

(reg.min.cp = which.min(reg.summary$cp))
(reg.min.bic = which.min(reg.summary$bic))
(reg.min.adjr2 = which.min(reg.summary$adjr2))

Создание фрейма данных для графика

df = data.frame(reg.summary$cp, reg.summary$bic, reg.summary$adjr2)
df$rownum = 1:nrow(df)

Изменение формы фрейма данных

molten = df %>% gather(variable, value, reg.summary.cp:reg.summary.adjr2 )

Построение с фасетами

(lp = molten %>% ggplot(data=.) + 
  aes(x=rownum, y=value) + 
  geom_line(col="black") + 
  geom_point(data=molten, aes(xint=reg.min.adjr2, z="reg.summary.adjr2", col="red")) + # this is where I got the wrong plot
  facet_wrap(~variable, scales="free_y")
)

enter image description here

И это показывает неправильно.Я ожидаю, что geom_point(data=molten, aes(xint=reg.min.adjr2, z="reg.summary.adjr2", col="red")) просто добавит reg.min.adjr2 к фасету reg.summary.adjr2 и только одну точку.Как это сделать?

1 Ответ

0 голосов
/ 08 марта 2019

У меня есть представление об этих двух SO:

Как добавить разные линии для фасетов

Добавить сегмент только к одному фасету, используя ggplot2

Сначала я создал новый фрейм данных для минимальных значений cp, bic и adjr2. И затем добавьте точки к основному сюжету.

Я уверен, что значение для x будет равно rownum, а y - это минимальное значение. Я также добавил параметр variable в min_plot, чтобы убедиться, что он будет добавлен к правому фасету.

min_plot = data.frame(
  rownum=c(reg.min.cp, reg.min.bic, reg.min.adjr2),
  y = c(reg.summary$cp[reg.min.cp], reg.summary$bic[reg.min.bic], reg.summary$adjr2[reg.min.adjr2]),
  variable=c("reg.summary.cp", "reg.summary.bic", "reg.summary.adjr2"))

(lp = molten %>% ggplot(data=.) 
  + aes(x=rownum, y=value)  
  + geom_line(col="black")  
  + facet_wrap(~variable, scales="free_y")  
  + geom_point(data = min_plot, aes(x=rownum, y=y), col="red")
)
...