Аннотирование уравнения линии регрессии и значения R ^ 2 - PullRequest
0 голосов
/ 26 февраля 2020

Я только что начал в последние несколько недель, и это мой самый первый пост. Я попытался реализовать предыдущее решение, опубликованное на stackoverflow, но безуспешно. Ссылка на код переполнения стека: Добавить уравнение линии регрессии и R ^ 2 на графике

У меня есть с независимой переменной, которая является временной меткой в ​​ формат, начиная с: «2011-05-27 16:00:02» и заканчивая «2020-02-18 19:00:34». При вызове функции линейной модели lm() в функции я могу наблюдать правильную линию тренда для графика. Однако я не могу добавить линейное уравнение и значение R^2 к графику. Я думаю, что это может иметь какое-то отношение к значению x в функции geom_text, потому что эта ось x имеет формат .

Дополнительная проблема возникает при вызове линейной модели функция lm() сама по себе. Это не дает правильный y-перехват. Я думаю, это потому, что он возвращается к 1970 году из-за формата . Любая помощь будет принята с благодарностью.

 ##Extracting hourly data from 5 minute data
#
data <- filter(rawdata, grepl(":00:",timestamp)) %>% droplevels
#
##Covert timestamp factor to POSIXct
newtimestamp <- as.POSIXct(data$timestamp,format='%Y-%m-%d %H:%M:%S')
#
##Stackoverflow code for adding regression line equation and R^2 value to plot
lm_eqn <- function(data){
  m <- lm(demand ~ newtimestamp, data = data);
  eq <- substitute(italic(y) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2, 
                   list(a = format(unname(coef(m)[1]), digits = 2),
                        b = format(unname(coef(m)[2]), digits = 2),
                        r2 = format(summary(m)$r.squared, digits = 3)))
  as.character(as.expression(eq));
}
#
#
## Visualization - plotting total demand against time using ggplot2

v1 <- ggplot(data=data, aes(x=newtimestamp, y=demand)) +
  geom_point(col="steelblue", size=0.0005, show.legend = T) +
  geom_smooth(method="lm", col="red") +
  scale_x_datetime(breaks = date_breaks('1 year'),labels=date_format('%Y')) +
  ggtitle("Total Demand over Time") + 
  ylab("Demand") +
  xlab("Time") +
  ylim(c(10000, 60000))   # deletes outliers on the y-axis
v1
v2 <- v1 + geom_text(x = '2011-05-27 16:00:02', y = 50000,label = lm_eqn(data), parse = TRUE)
v2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...