Я только что начал в r последние несколько недель, и это мой самый первый пост. Я попытался реализовать предыдущее решение, опубликованное на stackoverflow
, но безуспешно. Ссылка на код переполнения стека: Добавить уравнение линии регрессии и R ^ 2 на графике
У меня есть фрейм данных с независимой переменной, которая является временной меткой в posixct формат, начиная с: «2011-05-27 16:00:02» и заканчивая «2020-02-18 19:00:34». При вызове функции линейной модели lm()
в функции ggplot2 я могу наблюдать правильную линию тренда для графика. Однако я не могу добавить линейное уравнение регрессии и значение R^2
к графику. Я думаю, что это может иметь какое-то отношение к значению x в функции geom_text
, потому что эта ось x имеет формат posixct .
Дополнительная проблема возникает при вызове линейной модели функция lm()
сама по себе. Это не дает правильный y-перехват. Я думаю, это потому, что он возвращается к 1970 году из-за формата posixct . Любая помощь будет принята с благодарностью.
##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