Как нарисовать лессовую линию в сюжете - PullRequest
0 голосов
/ 22 мая 2018

Я часами пытался понять, как я могу заставить мою лессовую линию работать.Проблема в том, что я многого не знаю (скажем, почти ничего).Я только должен использовать R для одного курса в университете.Я создал поддельную таблицу, настоящая таблица для загрузки здесь

Мне нужно составить график, который работал на удивление хорошо.Но теперь мне нужно добавить две лессовые линии с разными пролетами.Моя проблема в том, что я не знаю, как на самом деле работает команда.Я имею в виду, я знаю, что это должно быть что-то вроде лесс (.. ~ .., data = ..).Шаг, в котором я застрял, помечен как «ЧТО ЗДЕСЬ» в приведенном ниже коде.

table <- structure(list(
  Months = c("1980-06", "1980-07", "1980-08", "1980-09", 
             "1980-10", "1980-11", "1980-12", "1981-01"), 
  Total = c(75000, 70000, 60000, 73000, 72000, 71000, 76000, 71000)),
  .Names = c("Monts", "Total of Killed Pigs"), 
  row.names = c(NA, 4L), class = "data.frame")

ts.obj <- ts(table$`Total of Killed Pigs`, start = c(1980, 1), frequency = 2)

plot(ts.obj)

trend1 <- loess(# **WHAT BELONGS HERE?**, data = table, span =1)

predict1 <- predict(trend1)

lines(predict1, col ="blue")

Это мой оригинальный код:

obj <- read.csv (file = "PATH / month-total-number-of-pigs-sla.csv"), header = TRUE, sep = ",") </p>

ts.obj <- ts (obj $ Monthly.total.number.of.pigs.slaughtered.in.Victoria..Jan.1980 ... August.1995, start = c (1980, 1), частота = 12) </p>

сюжет (ts.obj)

trend1 <- лесс (ЧТО ЗДЕСЬ ?, data = obj, span =1) </p>

предикат1 <- прогнозировать (тренд1) линии (предикат1, col = "синий") </p>

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

В случае, если вы хотите перейти с ggplot2:

 library(ggplot2)
 library(dplyr)

 table <- structure(list(
   Months = c("1980-06", "1980-07", "1980-08", "1980-09", 
              "1980-10", "1980-11", "1980-12", "1981-01"), 
   Total = c(75000, 70000, 60000, 73000, 72000, 71000, 76000, 71000)),
   .Names = c("Months", "Total"), 
   row.names = c(NA, 8L), class = "data.frame")

Изменить на правильные даты:

 table <- table %>% mutate(Months = as.Date(paste0(Months,"-01")))

Сюжет:

 ggplot(table, aes(x=Months, y=Total)) + 
   geom_line() +
   geom_smooth(span=1, se= FALSE, color ="red") +
   geom_smooth(span=2, se= FALSE, color ="green") +
   geom_smooth(span=3, se= FALSE) +
   theme_minimal()

enter image description here

0 голосов
/ 22 мая 2018

Мы можем покончить с аргументом data, поскольку временной ряд является одномерным (только одна переменная).

Формула ts.obj ~ index(ts.obj) может читаться как

значение как функция время

, поскольку ts.obj даст вам значения, а index(ts.obj) даст вам временной индекс для этих значений, а тильда ~ указывает, что первое является функцией или зависит отдругое.

library(zoo) # for index()

plot(ts.obj)

trend1 <- loess(ts.obj ~ index(ts.obj), span=1)
trend2 <- loess(ts.obj ~ index(ts.obj), span=2)
trend3 <- loess(ts.obj ~ index(ts.obj), span=3)

pred <- sapply(list(trend1, trend2, trend3), predict)

matlines(index(ts.obj), pred, lty=1, col=c("blue", "red", "orange"))

zoo строго не требуется.Я думаю, что если вы замените index(ts.obj) на as.numeric(time(ts.obj)), все будет в порядке.

enter image description here

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