Как я могу сравнить свои средние и на основе правила создать результирующий вектор? - PullRequest
0 голосов
/ 22 октября 2018

У меня есть этот фрейм данных, и я рассчитал среднее значение для каждой группы.

> new
      group          date        count       mean
1       1         2012-07-01    2.867133    2.442939
2       1         2012-08-01    2.018745    2.442939
3       2         2012-09-01    5.237515    6.779004
4       2         2012-10-01    8.320493    6.779004
5       3         2012-11-01    4.119850    3.884249
6       3         2012-12-01    3.648649    3.884249
7       4         2013-01-01    3.172867    3.618954
8       4         2013-02-01    4.065041    3.618954
9       5         2013-03-01    2.914798    3.825241
10      5         2013-04-01    4.735683    3.825241
11      6         2013-05-01    3.775411    3.800564
12      6         2013-06-01    3.825717    3.800564
13      7         2013-07-01    3.273427    2.994948
14      7         2013-08-01    2.716469    2.994948
15      8         2013-09-01    2.687296    3.180709
16      8         2013-10-01    3.674121    3.180709
17      9         2013-11-01    3.325942    2.924990
18      9         2013-12-01    2.524038    2.924990

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

seq <- seq(2, nrow(new), by=2)   # make vertical lines every 2nd point

ggplot() +    
  geom_line(data=new, aes(date, count, group=1)) +  # plot line of data points
  geom_vline(xintercept = as.numeric(new$date[seq])) +             # plot vertical lines
  geom_segment(data=new[seq,], aes(x=as.numeric(date)-2,           # plot horizontal lines (segments)
                                   xend=as.numeric(date), 
                                   y=average, 
                                   yend=average), col="red") +
  scale_x_discrete(breaks = new$date[seq], labels = new$date[seq]) # adjust x axis labels

enter image description here

ЧтоТеперь я хочу сравнить средние значения (красные линии) и определить правило, например: взять первые три средних, если средние значения не далеко друг от друга, тогда сделатьничего .Если эти три значения находятся далеко друг от друга (имеют большое отклонение), отметьте первую и последнюю точку нового $ count.

В качестве примера:

Первые три значения усреднения:

2.442939
6.779004
3.884249

Рассчитать стандартное отклонение:

> sd(c(2.442939,6.779004,3.884249))
[1] 2.208259

Если это высокое отклонение (например: sd <1), мой выходной вектор будет иметьзначения: </p>

2.018745   # 2nd value of group 1 (new$count)
3.648649   # 2nd value of group 3 (new$count)

И то же самое для остальных моих значений, поэтому у меня есть выходной вектор, с помощью которого я могу построить свои новые вертикальные линии (2.018745, 3.648649, ...)как интервалы ... если есть какое-то лучшее решение, я буду рад здесь об этом!

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