У меня есть дневная кривая x, и я пытаюсь аппроксимировать средние пиковые и непиковые значения x: https://ibb.co/Fq1Byzk
Я определил пороговое значение дельты таким образом, что, когда дельта ниже порогового значения, x будет находиться в периоде низкой или максимальной нагрузки. Я хочу получить среднее пиковое значение, где среднее значение относится только к значениям в пределах x, где дельта <порога. Прямо сейчас он также усредняет выбросы.
delta <- matrix(0,24,ncol=1)
for (i in 2:24){
# i-th element is the i-th hour per day
delta[i] = x[i,2]-x[i-1,2]
}
# Find hour at which max and min daily values occur
max_threshold = 0.15*max(delta)
min_threshold = 0.15*min(delta)
c <- abs(delta) < max_threshold
t1 <- which(delta>max_threshold)[1]-1 # t1: time index at end of off-peak
t2 <- which.max(delta) + 1 # t2 is time of initial peak
t3 <- which.min(delta)-2 # t3 is time of end peak
t4 <- which.min(delta) # t4 time index of evening off-peak
am <- mean(x[1:t1,2]) # average morning off-peak value
peak <- mean(x[t2:t3,2]) #average peak value
pm <- mean(x[t4:24,2]) # average evening off-peak value
> dput(x)
structure(list(time = structure(c(1451952000, 1451955600, 1451959200,
1451962800, 1451966400, 1451970000, 1451973600, 1451977200, 1451980800,
1451984400, 1451988000, 1451991600, 1451995200, 1451998800, 1452002400,
1452006000, 1452009600, 1452013200, 1452016800, 1452020400, 1452024000,
1452027600, 1452031200, 1452034800, 1452038400, 1452042000, 1452045600,
1452049200, 1452052800, 1452056400, 1452060000, 1452063600, 1452067200,
1452070800, 1452074400, 1452078000, 1452081600, 1452085200, 1452088800,
1452092400, 1452096000, 1452099600, 1452103200, 1452106800, 1452110400,
1452114000, 1452117600, 1452121200), class = c("POSIXct", "POSIXt"
), tzone = "UTC"), Crow_education_Omer = c(0.019186330898848,
0.0192706664192825, 0.0182164724138513, 0.018174304653634, 0.019355001939717,
0.0197345117816722, 0.023951287803397, 0.0323848398468467, 0.0343245568168401,
0.0378244809148717, 0.0393003525224754, 0.0403545465279066, 0.0405232175687756,
0.0393425202826927, 0.0398907011655169, 0.0377401453944372, 0.0344932278577091,
0.0317101556833707, 0.0304872906370705, 0.0297282709531601, 0.0287584124681633,
0.0252584883701317, 0.0196080085010205, 0.0197345117816722, 0.0194815052203687,
0.0196080085010205, 0.0184273112149375, 0.0184694789751548, 0.0191441631386307,
0.019692344021455, 0.025469327171218, 0.0352522475416196, 0.0376136421137855,
0.0403967142881239, 0.0435592963044175, 0.0433484575033313, 0.0430532831818105,
0.042968947661376, 0.043306289743114, 0.044655658070066, 0.0424207667785518,
0.0416195793344241, 0.0382883262772615, 0.03769797763422, 0.0330173562501054,
0.0281680638251219, 0.0234452746807901, 0.0225597517162278)), row.names = 97:144, class = "data.frame")
Кроме того, как мне построить новую упрощенную кривую вместе с исходной кривой x на одном графике? Кажется, я не могу расплавить или rbind() новую кривую с уменьшенным количеством точек данных с x, так как мой столбец времени имеет значение POSIXCT.
Спасибо.
Не могли бы вы объяснить, я хочу получить среднее пиковое значение, где среднее значение состоит только из значений в пределах x, где дельта < порог немного дальше? Например: Вы хотите включить в
am
только значенияx[1:t1,2]
, чьиdelta < max_threshold
? А как насчетmin_threshold
?так, например, я хочу, чтобы мое среднее пиковое значение включало только значения с 10:00 до 14:00, потому что дельта, вычисленная между 10:00 и 14:00, меньше, чем мое значение max_threshold ~0,002. Прямо сейчас мое среднее пиковое значение включает все от t2 до t3. Я вычислил max_threshold и min_threshold, так как они предназначались для определения t2 и t3... но я не был уверен, как это сделать, поэтому я просто установил t2 и t3 на основе добавления 1-2 часов к максимальной и минимальной дельтам. В идеале t2 и t3 должны основываться именно на том, где значения дельты превышают максимальный и минимальный пороги.
Ваша дельта в
13:00
составляет около-0.00118
. Это< max_threshold
, но также и< min_threshold
. Почему этот должен быть включен? (Извините за глупые вопросы, но я еще не понял алгоритм...). В14:00
дельта равна< max_thr
и снова> min_thr
.вы абсолютно правы. я пересмотрел вектор c выше, чтобы вместо этого показать абсолютное значение дельты. В основном я хочу усреднить x между t2 и t3 по индексам, где abs(delta) < max_thr