Interpolacja Fouriera / trygonometryczna


9

tło

W artykule Epsteina (1991): Przy uzyskiwaniu dziennych wartości klimatologicznych ze średnich miesięcznych podano formułę i algorytm obliczania interpolacji Fouriera dla wartości okresowych i równomiernych.

W artykule celem jest uzyskanie dziennych wartości ze środków miesięcznych poprzez interpolację.

W skrócie przyjmuje się, że nieznane wartości dzienne mogą być reprezentowane przez sumę składników harmonicznych: W pracy (czas) wyrażono w miesiącach.

y(t)=za0+jot[zajotsałata(2)πjott/12)+bjotgrzech(2)πjott/12)]
t

Po pewnym odstępstwie pokazano, że warunki można obliczyć za pomocą: Gdzie oznacza średnie miesięczne, a miesiąc.

za0=T.YT./12zajot=[(πjot/12)/grzech(πjot/12)]×T.[YT.sałata(2)πjotT./12)/6]       jot=1,,5bjot=[(πjot/12)/grzech(πjot/12)]×T.[YT.grzech(2)πjotT./12)/6]       jot=1,,5za6=[(πjot/12)/grzech(πjot/12)]×T.[YT.sałata(πT.)/12]b6=0
YT.T.

Harzallah (1995) podsumowuje to podejście w następujący sposób: „Interpolacja jest przeprowadzana przez dodanie zer do współczynników widmowych danych i poprzez wykonanie odwrotnej transformaty Fouriera do uzyskanych rozszerzonych współczynników. Metoda jest równoważna zastosowaniu filtra prostokątnego do współczynników Fouriera . ”


pytania

Moim celem jest wykorzystanie powyższej metodologii do interpolacji cotygodniowych środków w celu uzyskania danych dziennych (patrz moje poprzednie pytanie ). Podsumowując, mam 835 tygodniowych środków na zliczanie danych (patrz przykładowy zestaw danych na dole pytania). Jest kilka rzeczy, których nie rozumiem, zanim nie mogę zastosować powyższego podejścia:

  1. Jak należałoby zmienić formuły w mojej sytuacji (wartości tygodniowe zamiast miesięcznych)?
  2. Jak można wyrazić czas ? Zakładałem, że (lub z ogólnie punktami danych), czy to prawda?tt/835t/nn
  3. Dlaczego autor oblicza 7 terminów (tj. )? Ile warunków powinienem wziąć pod uwagę?0jot6
  4. Rozumiem, że to pytanie można prawdopodobnie rozwiązać stosując metodę regresji i przewidywania interpolacji (dzięki Nickowi). Jednak niektóre rzeczy są dla mnie niejasne: ile warunków harmonicznych należy uwzględnić w regresji? A jaki okres powinienem wziąć? Jak można przeprowadzić regresję, aby zapewnić zachowanie tygodniowych środków (ponieważ nie chcę dokładnego dopasowania harmonicznych do danych)?

Stosując metodę regresji (która jest również wyjaśniona w tym artykule ), udało mi się dokładnie dopasować harmoniczne do danych ( w moim przykładzie przebiegłoby przez , więc dopasowałem 417 terminów). W jaki sposób można zmodyfikować to podejście - jeśli to możliwe - w celu zachowania środków tygodniowych? Może poprzez zastosowanie współczynników korekcyjnych do każdego terminu regresji?jot1,,417  

Wykres dokładnego dopasowania harmonicznego jest następujący:

Dokładne dopasowanie harmoniczne

EDYTOWAĆ

Korzystając z pakietu sygnału i interp1funkcji, oto co udało mi się zrobić przy użyciu przykładowego zestawu danych od dołu (wielkie dzięki @noumenal). Używam, q=7ponieważ mamy cotygodniowe dane:

# Set up the time scale

daily.ts <- seq(from=as.Date("1995-01-01"), to=as.Date("2010-12-31"), by="day")

# Set up data frame 

ts.frame <- data.frame(daily.ts=daily.ts, wdayno=as.POSIXlt(daily.ts)$wday,
                       yearday = 1:5844,
                       no.influ.cases=NA)

# Add the data from the example dataset called "my.dat"

ts.frame$no.influ.cases[ts.frame$wdayno==3] <- my.dat$case

# Interpolation

case.interp1 <- interp1(x=ts.frame$yearday[!is.na(ts.frame$no.influ.case)],y=(ts.frame$no.influ.cases[!is.na(ts.frame$no.influ.case)]),xi=ts.frame$yearday, method = c("cubic"))

# Plot subset for better interpretation
par(bg="white", cex=1.2, las=1)
plot((ts.frame$no.influ.cases)~ts.frame$yearday, pch=20,
     col=grey(0.4),
     cex=1, las=1,xlim=c(0,400), xlab="Day", ylab="Influenza cases")
lines(case.interp1, col="steelblue", lwd=1)

Cubicinterpo

Istnieją tutaj dwa problemy:

  1. Krzywa wydaje się pasować „zbyt dobrze”: przechodzi przez każdy punkt
  2. Tygodniowe środki nie są zachowane

Przykładowy zestaw danych

structure(list(date = structure(c(9134, 9141, 9148, 9155, 9162, 
9169, 9176, 9183, 9190, 9197, 9204, 9211, 9218, 9225, 9232, 9239, 
9246, 9253, 9260, 9267, 9274, 9281, 9288, 9295, 9302, 9309, 9316, 
9323, 9330, 9337, 9344, 9351, 9358, 9365, 9372, 9379, 9386, 9393, 
9400, 9407, 9414, 9421, 9428, 9435, 9442, 9449, 9456, 9463, 9470, 
9477, 9484, 9491, 9498, 9505, 9512, 9519, 9526, 9533, 9540, 9547, 
9554, 9561, 9568, 9575, 9582, 9589, 9596, 9603, 9610, 9617, 9624, 
9631, 9638, 9645, 9652, 9659, 9666, 9673, 9680, 9687, 9694, 9701, 
9708, 9715, 9722, 9729, 9736, 9743, 9750, 9757, 9764, 9771, 9778, 
9785, 9792, 9799, 9806, 9813, 9820, 9827, 9834, 9841, 9848, 9855, 
9862, 9869, 9876, 9883, 9890, 9897, 9904, 9911, 9918, 9925, 9932, 
9939, 9946, 9953, 9960, 9967, 9974, 9981, 9988, 9995, 10002, 
10009, 10016, 10023, 10030, 10037, 10044, 10051, 10058, 10065, 
10072, 10079, 10086, 10093, 10100, 10107, 10114, 10121, 10128, 
10135, 10142, 10149, 10156, 10163, 10170, 10177, 10184, 10191, 
10198, 10205, 10212, 10219, 10226, 10233, 10240, 10247, 10254, 
10261, 10268, 10275, 10282, 10289, 10296, 10303, 10310, 10317, 
10324, 10331, 10338, 10345, 10352, 10359, 10366, 10373, 10380, 
10387, 10394, 10401, 10408, 10415, 10422, 10429, 10436, 10443, 
10450, 10457, 10464, 10471, 10478, 10485, 10492, 10499, 10506, 
10513, 10520, 10527, 10534, 10541, 10548, 10555, 10562, 10569, 
10576, 10583, 10590, 10597, 10604, 10611, 10618, 10625, 10632, 
10639, 10646, 10653, 10660, 10667, 10674, 10681, 10688, 10695, 
10702, 10709, 10716, 10723, 10730, 10737, 10744, 10751, 10758, 
10765, 10772, 10779, 10786, 10793, 10800, 10807, 10814, 10821, 
10828, 10835, 10842, 10849, 10856, 10863, 10870, 10877, 10884, 
10891, 10898, 10905, 10912, 10919, 10926, 10933, 10940, 10947, 
10954, 10961, 10968, 10975, 10982, 10989, 10996, 11003, 11010, 
11017, 11024, 11031, 11038, 11045, 11052, 11059, 11066, 11073, 
11080, 11087, 11094, 11101, 11108, 11115, 11122, 11129, 11136, 
11143, 11150, 11157, 11164, 11171, 11178, 11185, 11192, 11199, 
11206, 11213, 11220, 11227, 11234, 11241, 11248, 11255, 11262, 
11269, 11276, 11283, 11290, 11297, 11304, 11311, 11318, 11325, 
11332, 11339, 11346, 11353, 11360, 11367, 11374, 11381, 11388, 
11395, 11402, 11409, 11416, 11423, 11430, 11437, 11444, 11451, 
11458, 11465, 11472, 11479, 11486, 11493, 11500, 11507, 11514, 
11521, 11528, 11535, 11542, 11549, 11556, 11563, 11570, 11577, 
11584, 11591, 11598, 11605, 11612, 11619, 11626, 11633, 11640, 
11647, 11654, 11661, 11668, 11675, 11682, 11689, 11696, 11703, 
11710, 11717, 11724, 11731, 11738, 11745, 11752, 11759, 11766, 
11773, 11780, 11787, 11794, 11801, 11808, 11815, 11822, 11829, 
11836, 11843, 11850, 11857, 11864, 11871, 11878, 11885, 11892, 
11899, 11906, 11913, 11920, 11927, 11934, 11941, 11948, 11955, 
11962, 11969, 11976, 11983, 11990, 11997, 12004, 12011, 12018, 
12025, 12032, 12039, 12046, 12053, 12060, 12067, 12074, 12081, 
12088, 12095, 12102, 12109, 12116, 12123, 12130, 12137, 12144, 
12151, 12158, 12165, 12172, 12179, 12186, 12193, 12200, 12207, 
12214, 12221, 12228, 12235, 12242, 12249, 12256, 12263, 12270, 
12277, 12284, 12291, 12298, 12305, 12312, 12319, 12326, 12333, 
12340, 12347, 12354, 12361, 12368, 12375, 12382, 12389, 12396, 
12403, 12410, 12417, 12424, 12431, 12438, 12445, 12452, 12459, 
12466, 12473, 12480, 12487, 12494, 12501, 12508, 12515, 12522, 
12529, 12536, 12543, 12550, 12557, 12564, 12571, 12578, 12585, 
12592, 12599, 12606, 12613, 12620, 12627, 12634, 12641, 12648, 
12655, 12662, 12669, 12676, 12683, 12690, 12697, 12704, 12711, 
12718, 12725, 12732, 12739, 12746, 12753, 12760, 12767, 12774, 
12781, 12788, 12795, 12802, 12809, 12816, 12823, 12830, 12837, 
12844, 12851, 12858, 12865, 12872, 12879, 12886, 12893, 12900, 
12907, 12914, 12921, 12928, 12935, 12942, 12949, 12956, 12963, 
12970, 12977, 12984, 12991, 12998, 13005, 13012, 13019, 13026, 
13033, 13040, 13047, 13054, 13061, 13068, 13075, 13082, 13089, 
13096, 13103, 13110, 13117, 13124, 13131, 13138, 13145, 13152, 
13159, 13166, 13173, 13180, 13187, 13194, 13201, 13208, 13215, 
13222, 13229, 13236, 13243, 13250, 13257, 13264, 13271, 13278, 
13285, 13292, 13299, 13306, 13313, 13320, 13327, 13334, 13341, 
13348, 13355, 13362, 13369, 13376, 13383, 13390, 13397, 13404, 
13411, 13418, 13425, 13432, 13439, 13446, 13453, 13460, 13467, 
13474, 13481, 13488, 13495, 13502, 13509, 13516, 13523, 13530, 
13537, 13544, 13551, 13558, 13565, 13572, 13579, 13586, 13593, 
13600, 13607, 13614, 13621, 13628, 13635, 13642, 13649, 13656, 
13663, 13670, 13677, 13684, 13691, 13698, 13705, 13712, 13719, 
13726, 13733, 13740, 13747, 13754, 13761, 13768, 13775, 13782, 
13789, 13796, 13803, 13810, 13817, 13824, 13831, 13838, 13845, 
13852, 13859, 13866, 13873, 13880, 13887, 13894, 13901, 13908, 
13915, 13922, 13929, 13936, 13943, 13950, 13957, 13964, 13971, 
13978, 13985, 13992, 13999, 14006, 14013, 14020, 14027, 14034, 
14041, 14048, 14055, 14062, 14069, 14076, 14083, 14090, 14097, 
14104, 14111, 14118, 14125, 14132, 14139, 14146, 14153, 14160, 
14167, 14174, 14181, 14188, 14195, 14202, 14209, 14216, 14223, 
14230, 14237, 14244, 14251, 14258, 14265, 14272, 14279, 14286, 
14293, 14300, 14307, 14314, 14321, 14328, 14335, 14342, 14349, 
14356, 14363, 14370, 14377, 14384, 14391, 14398, 14405, 14412, 
14419, 14426, 14433, 14440, 14447, 14454, 14461, 14468, 14475, 
14482, 14489, 14496, 14503, 14510, 14517, 14524, 14531, 14538, 
14545, 14552, 14559, 14566, 14573, 14580, 14587, 14594, 14601, 
14608, 14615, 14622, 14629, 14636, 14643, 14650, 14657, 14664, 
14671, 14678, 14685, 14692, 14699, 14706, 14713, 14720, 14727, 
14734, 14741, 14748, 14755, 14762, 14769, 14776, 14783, 14790, 
14797, 14804, 14811, 14818, 14825, 14832, 14839, 14846, 14853, 
14860, 14867, 14874, 14881, 14888, 14895, 14902, 14909, 14916, 
14923, 14930, 14937, 14944, 14951, 14958, 14965, 14972), class = "Date"), 
    cases = c(168L, 199L, 214L, 230L, 267L, 373L, 387L, 443L, 
    579L, 821L, 1229L, 1014L, 831L, 648L, 257L, 203L, 137L, 78L, 
    82L, 69L, 45L, 51L, 45L, 63L, 55L, 54L, 52L, 27L, 24L, 12L, 
    10L, 22L, 42L, 32L, 52L, 82L, 95L, 91L, 104L, 143L, 114L, 
    100L, 83L, 113L, 145L, 175L, 222L, 258L, 384L, 755L, 976L, 
    879L, 846L, 1004L, 801L, 799L, 680L, 530L, 410L, 302L, 288L, 
    234L, 269L, 245L, 240L, 176L, 188L, 128L, 96L, 59L, 63L, 
    44L, 52L, 39L, 50L, 36L, 40L, 48L, 32L, 39L, 28L, 29L, 16L, 
    20L, 25L, 25L, 48L, 57L, 76L, 117L, 107L, 91L, 90L, 83L, 
    76L, 86L, 104L, 101L, 116L, 120L, 185L, 290L, 537L, 485L, 
    561L, 1142L, 1213L, 1235L, 1085L, 1052L, 987L, 918L, 746L, 
    620L, 396L, 280L, 214L, 148L, 148L, 94L, 107L, 69L, 55L, 
    69L, 47L, 43L, 49L, 30L, 42L, 51L, 41L, 39L, 40L, 38L, 22L, 
    37L, 26L, 40L, 56L, 54L, 74L, 99L, 114L, 114L, 120L, 114L, 
    123L, 131L, 170L, 147L, 163L, 163L, 160L, 158L, 163L, 124L, 
    115L, 176L, 171L, 214L, 320L, 507L, 902L, 1190L, 1272L, 1282L, 
    1146L, 896L, 597L, 434L, 216L, 141L, 101L, 86L, 65L, 55L, 
    35L, 49L, 29L, 55L, 53L, 57L, 34L, 43L, 42L, 13L, 17L, 20L, 
    27L, 36L, 47L, 64L, 77L, 82L, 82L, 95L, 107L, 96L, 106L, 
    93L, 114L, 102L, 116L, 128L, 123L, 212L, 203L, 165L, 267L, 
    550L, 761L, 998L, 1308L, 1613L, 1704L, 1669L, 1296L, 975L, 
    600L, 337L, 259L, 145L, 91L, 70L, 79L, 63L, 58L, 51L, 53L, 
    39L, 49L, 33L, 47L, 56L, 32L, 43L, 47L, 19L, 32L, 18L, 34L, 
    39L, 63L, 57L, 55L, 69L, 76L, 103L, 99L, 108L, 131L, 113L, 
    106L, 122L, 138L, 136L, 175L, 207L, 324L, 499L, 985L, 1674L, 
    1753L, 1419L, 1105L, 821L, 466L, 274L, 180L, 143L, 82L, 101L, 
    72L, 55L, 71L, 50L, 33L, 26L, 25L, 27L, 21L, 24L, 24L, 20L, 
    18L, 18L, 25L, 23L, 13L, 10L, 16L, 9L, 12L, 16L, 25L, 31L, 
    36L, 40L, 36L, 47L, 32L, 46L, 75L, 63L, 49L, 90L, 83L, 101L, 
    78L, 79L, 98L, 131L, 83L, 122L, 179L, 334L, 544L, 656L, 718L, 
    570L, 323L, 220L, 194L, 125L, 95L, 77L, 46L, 42L, 29L, 35L, 
    21L, 29L, 16L, 14L, 19L, 15L, 19L, 18L, 21L, 10L, 14L, 7L, 
    7L, 5L, 9L, 14L, 11L, 18L, 22L, 39L, 36L, 46L, 44L, 37L, 
    30L, 39L, 37L, 45L, 71L, 59L, 57L, 80L, 68L, 88L, 72L, 74L, 
    208L, 357L, 621L, 839L, 964L, 835L, 735L, 651L, 400L, 292L, 
    198L, 85L, 64L, 41L, 40L, 23L, 18L, 14L, 22L, 9L, 19L, 8L, 
    14L, 12L, 15L, 14L, 4L, 6L, 7L, 7L, 8L, 13L, 10L, 19L, 17L, 
    20L, 22L, 40L, 37L, 45L, 34L, 26L, 35L, 67L, 49L, 77L, 82L, 
    80L, 104L, 88L, 49L, 73L, 113L, 142L, 152L, 206L, 293L, 513L, 
    657L, 919L, 930L, 793L, 603L, 323L, 202L, 112L, 55L, 31L, 
    27L, 15L, 15L, 6L, 13L, 21L, 10L, 11L, 9L, 8L, 11L, 7L, 5L, 
    1L, 4L, 7L, 2L, 6L, 12L, 14L, 21L, 29L, 32L, 26L, 22L, 44L, 
    39L, 47L, 44L, 93L, 145L, 289L, 456L, 685L, 548L, 687L, 773L, 
    575L, 355L, 248L, 179L, 129L, 122L, 103L, 72L, 72L, 36L, 
    26L, 31L, 12L, 14L, 14L, 14L, 7L, 8L, 2L, 7L, 8L, 9L, 26L, 
    10L, 13L, 13L, 5L, 5L, 3L, 6L, 1L, 10L, 6L, 7L, 17L, 12L, 
    21L, 32L, 29L, 18L, 22L, 24L, 38L, 52L, 53L, 73L, 49L, 52L, 
    70L, 77L, 95L, 135L, 163L, 303L, 473L, 823L, 1126L, 1052L, 
    794L, 459L, 314L, 252L, 111L, 55L, 35L, 14L, 30L, 21L, 16L, 
    9L, 11L, 6L, 6L, 8L, 9L, 9L, 10L, 15L, 15L, 11L, 6L, 3L, 
    8L, 4L, 7L, 7L, 13L, 10L, 23L, 24L, 36L, 25L, 34L, 37L, 46L, 
    39L, 37L, 55L, 65L, 54L, 60L, 82L, 55L, 53L, 61L, 52L, 75L, 
    92L, 121L, 170L, 199L, 231L, 259L, 331L, 357L, 262L, 154L, 
    77L, 34L, 41L, 21L, 17L, 16L, 7L, 15L, 11L, 7L, 5L, 6L, 13L, 
    7L, 6L, 8L, 7L, 1L, 11L, 9L, 3L, 9L, 9L, 8L, 15L, 19L, 16L, 
    10L, 12L, 26L, 35L, 35L, 41L, 34L, 30L, 36L, 43L, 23L, 55L, 
    107L, 141L, 217L, 381L, 736L, 782L, 663L, 398L, 182L, 137L, 
    79L, 28L, 26L, 16L, 14L, 8L, 4L, 4L, 6L, 6L, 11L, 4L, 5L, 
    7L, 7L, 6L, 8L, 2L, 3L, 3L, 1L, 1L, 3L, 3L, 2L, 8L, 8L, 11L, 
    10L, 11L, 8L, 24L, 25L, 25L, 33L, 36L, 51L, 61L, 74L, 92L, 
    89L, 123L, 402L, 602L, 524L, 494L, 406L, 344L, 329L, 225L, 
    136L, 136L, 84L, 55L, 55L, 42L, 19L, 28L, 8L, 7L, 2L, 7L, 
    6L, 4L, 3L, 5L, 3L, 3L, 0L, 1L, 2L, 3L, 2L, 1L, 2L, 2L, 9L, 
    4L, 9L, 10L, 18L, 15L, 13L, 12L, 10L, 19L, 15L, 22L, 23L, 
    34L, 43L, 53L, 47L, 57L, 328L, 552L, 787L, 736L, 578L, 374L, 
    228L, 161L, 121L, 96L, 58L, 50L, 37L, 14L, 9L, 6L, 15L, 12L, 
    9L, 1L, 6L, 4L, 7L, 7L, 3L, 6L, 9L, 15L, 22L, 28L, 34L, 62L, 
    54L, 75L, 65L, 58L, 57L, 60L, 37L, 47L, 60L, 89L, 90L, 193L, 
    364L, 553L, 543L, 676L, 550L, 403L, 252L, 140L, 125L, 99L, 
    63L, 63L, 76L, 85L, 68L, 67L, 38L, 25L, 24L, 11L, 9L, 9L, 
    4L, 8L, 4L, 6L, 5L, 2L, 6L, 4L, 4L, 1L, 5L, 4L, 1L, 2L, 2L, 
    2L, 2L, 3L, 4L, 4L, 7L, 5L, 2L, 10L, 11L, 17L, 11L, 16L, 
    15L, 11L, 12L, 21L, 20L, 25L, 46L, 51L, 90L, 123L)), .Names = c("date", 
"cases"), row.names = c(NA, -835L), class = "data.frame")

2
Starsza literatura często zachwyca się formułami rokokowej złożoności tego rodzaju rzeczy. W praktyce pochyliłbym się do tyłu nad myśleniem o tym jako o problemie regresji, tak że interpolowane wartości są tylko przewidywanymi wartościami z regresji. Patrz np. Stats.stackexchange.com/questions/60500/… Kluczową zasadą jest to, że cykl główny powtarza się raz w roku.
Nick Cox

1
W praktyce chcesz bardzo ściśle dopasować się do danych, ponieważ chcesz lokalne wygładzanie. Może to wymagać kilku par Fouriera, ale bardzo szybko przychodzą malejące zwroty, tak że każda nowa para warunków wkrótce dodaje niewiele. Musisz tylko ssać i zobaczyć. Wykreślenie wszystkiego sprawia, że ​​jest to wyraźniejsze.
Nick Cox,

1
Wypróbowałem to krótko z twoimi danymi (używając Stata, a nie R). Krótko mówiąc, chociaż w danych występuje wyraźna sezonowość, nie jest to wystarczająco regularne, aby to podejście w ogóle działało dobrze: na przykład nie tylko zmienia się czas szczytów, ale także liczba przypadków w szczycie; w niektórych latach, ale nie we wszystkich, pod koniec roku kalendarzowego występuje drugi szczyt. Ponadto sezonowość jest połączona z wyraźnym trendem długoterminowym. Domyślam się, że aby uzyskać codzienne sprawy, powinieneś uciekać się do jakiejś ściśle lokalnej interpolacji lub wygładzenia tygodniowej serii rozszerzonej siedmiokrotnie.
Nick Cox,

1
W inżynierii systemów sterowania kryterium Nyquista stosuje się jako podstawę częstotliwości próbkowania. Mówi próbka z ponad dwukrotnie większą częstotliwością w danych. W praktyce bardziej konwencjonalne jest próbkowanie powyżej 5-krotności najwyższej częstotliwości, którą chcesz rozwiązać. Jeśli twoje dane wejściowe są cotygodniowe, Nyquist sugeruje, że najwyższa możliwa do rozwiązania częstotliwość wynosi 2 tygodnie. Mogłoby być lepiej, gdybyś miał inne cotygodniowe statystyki, aby poinformować o próbkowaniu i podać średnią. en.wikipedia.org/wiki/Nyquist-Shannon_sampling_theorem
EngrStudent

+1 Doskonałe pytanie! Czy wiesz przypadkiem, jak wykryć sygnał w szumie (najlepiej w R), pod warunkiem, że masz wiele rozkładów, w których szum jest gaussowski, a sygnał gaussowski plus inna część? Patrzyłem na wiele pakietów i funkcji (signal, fft () itd.), A nawet bawiłem się danymi, próbując zastosować transformację Fouriera, a nawet miary entropii, ale jak dotąd nie przyniosło to rezultatu. Próbowałem odpowiedzieć na pytanie (nie moje) i po drodze nauczyć się czegoś nowego, ponieważ uważam ten temat za dość interesujący.
Aleksandr Blekh

Odpowiedzi:


4

Nie jestem ekspertem od transformacji Fouriera, ale ...

Całkowity zakres próbek Epsteina wynosił 24 miesiące, a miesięczna częstotliwość próbkowania: 1/12 lat. Twój zakres próbek wynosi 835 tygodni. Jeśli Twoim celem jest oszacowanie średniej dla jednego roku na podstawie danych z ~ 16 lat na podstawie danych dziennych, potrzebujesz częstotliwości próbkowania wynoszącej 1/365 lat. Zastąp więc 52 zamiast 12, ale najpierw standaryzuj jednostki i przedłuż swoje 835 tygodni do 835 * 7 = 5845 dni. Jeśli jednak masz tylko cotygodniowe punkty danych, sugeruję częstotliwość próbkowania 52 z głębią bitową 16 lub 17 dla analizy pików, alternatywnie 32 lub 33 dla porównania parzystych / nieparzystych. Tak więc domyślne opcje wprowadzania obejmują: 1) użycie tygodniowych środków (lub mediany bezwzględnego odchylenia, MAD lub czegoś w tym zakresie) lub 2) użycie dziennych wartości, które zapewniają wyższą rozdzielczość.

Liebman i in. wybrał punkt odcięcia jmax = 2. Stąd ryc. 3 zawiera mniej części cząstkowych, a zatem jest bardziej symetryczny na górze sinusoidy w porównaniu do ryc. 2. (Pojedyncza cząstka przy częstotliwości podstawowej dałaby falę czysto sinusoidalną. ) Gdyby Epstein wybrał wyższą rozdzielczość (np. Jmax = 12), transformacja przypuszczalnie spowodowałaby jedynie niewielkie fluktuacje z dodatkowymi składnikami, a może brakowałoby mocy obliczeniowej.

Po wizualnej inspekcji twoich danych wydaje się, że masz 16-17 pików. Sugerowałbym ustawienie jmax lub „głębokość bitów” na 6, 11, 16 lub 17 (patrz rysunek) i porównanie wyników. Im wyższe piki, tym bardziej przyczyniają się do pierwotnego złożonego przebiegu. Zakładając 17-pasmową rozdzielczość lub głębię bitową, 17. część cząstkowa przyczynia się minimalnie do pierwotnego wzoru fali w porównaniu z 6. szczytem. Jednak przy rozdzielczości pasma 34 można wykryć różnicę między parzystymi i nieparzystymi pikami, jak sugerują dość stałe doliny. Głębokość bitów zależy od pytania badawczego, czy interesują Cię tylko szczyty, czy zarówno szczyty, jak i doliny, ale także to , jak dokładnie chcesz przybliżyć pierwotną serię.

Analiza Fouriera zmniejsza liczbę punktów danych. Gdyby odwrócić funkcję na pewnej głębokości bitowej za pomocą transformaty Fouriera, prawdopodobnie można by sprawdzić krzyżowo, czy nowe średnie oszacowania odpowiadają pierwotnym średnim. Tak więc, aby odpowiedzieć na czwarte pytanie: wspomniane parametry regresji zależą od wymaganej czułości i rozdzielczości. Jeśli nie chcesz dokładnego dopasowania, to po prostu wprowadź cotygodniowe środki w transformacji. Należy jednak pamiętać, że mniejsza głębia bitowa również zmniejsza dane. Na przykład zwróć uwagę na to, jak nakładka harmoniczna Epsteina na analizę Liebermana i współpracowników pomija punkt środkowy funkcji kroku, z krzywą lekko pochyloną w prawo (tj. Szacunkowa temperatura zbyt wysoka), w grudniu na rycinie 3.


Parametry Liebmana i współpracowników:

  • Głębia bitowa: 2

Parametry Epsteina:

  • Częstotliwość próbkowania: 12 [co miesiąc]
  • Zakres próbki: 24 miesiące
  • Głębia bitowa: 6

Twoje parametry:

  • Częstotliwość próbkowania: 365 [każdego dnia]

  • Zakres próbki: 5845 dni

Dokładne podejście do głębi bitowej

Dokładne dopasowanie na podstawie oględzin. (Jeśli masz moc, po prostu zobacz, co się stanie w porównaniu z niższymi głębokościami bitów.)

  • Pełne spektrum (szczyty): 17
  • Pełne spektrum (parzyste / nieparzyste): 34

Podejście o zmiennej głębokości bitów

Prawdopodobnie to właśnie chcesz zrobić:

  • Porównaj tylko piki: 6, 11, 16, 17
  • Porównaj Parzyste / Nieparzyste: 12, 22, 32, 34
  • Ponownie zmień i porównaj środki

Podejście to dałoby coś podobnego do porównania liczb w Epsteinie, jeśli ponownie odwrócisz transformację, tj. Zsyntetyzujesz częściowe w przybliżeniu do pierwotnego szeregu czasowego. Możesz także porównać dyskretne punkty ponownie zsyntetyzowanych krzywych ze średnimi wartościami, być może nawet przetestować pod kątem znaczących różnic, aby wskazać czułość wybranego głębokości bitu.


AKTUALIZACJA 1:

Głębia bitowa

Bit - skrót od cyfry binarnej - ma wartość 0 lub 1. Bity 010101 opisują falę kwadratową. Głębia bitowa wynosi 1 bit. Aby opisać falę piły, potrzebujesz więcej bitów: 0123210. Im bardziej złożona fala, tym więcej bitów potrzebujesz:

Jest to nieco uproszczone wyjaśnienie, ale im bardziej złożona jest seria czasowa, tym więcej bitów potrzeba do jej modelowania. W rzeczywistości „1” jest składową fali sinusoidalnej, a nie fali prostokątnej (fala prostokątna jest bardziej podobna do 3 2 1 0 - patrz załączony rysunek). 0 bitów byłoby linią płaską. Informacje gubią się wraz ze zmniejszeniem głębi bitowej. Na przykład dźwięk w jakości CD jest zwykle 16-bitowy, ale dźwięk w telefonie stacjonarnym ma często około 8 bitów.

Przeczytaj ten obraz od lewej do prawej, skupiając się na wykresach:

FFT

Właśnie zakończyłeś analizę spektrum mocy (chociaż w wysokiej rozdzielczości na rysunku). Twoim kolejnym celem byłoby dowiedzieć się: ile komponentów potrzebuję w spektrum mocy, aby dokładnie uchwycić średnie szeregów czasowych?

AKTUALIZACJA 2


Filtrować lub nie filtrować

Nie jestem do końca pewien, jak wprowadziłbyś ograniczenie w regresji, ponieważ znam tylko ograniczenia przedziałowe, ale być może DSP jest twoim rozwiązaniem. Oto, co do tej pory wymyśliłem:

  • Krok 1. Podziel serię na składowe zatokowe za pomocą funkcji Fouriera w pełnym zestawie danych (w dniach)

  • Krok 2. Odtwórz szereg czasowy za pomocą odwrotnej transformacji Fouriera, z dodatkowym ograniczeniem średnim sprzężonym z pierwotnymi danymi: odchylenia interpolacji od pierwotnych średnich powinny się znosić (Harzallah, 1995).

Domyślam się, że musiałbyś wprowadzić autoregresję, jeśli dobrze rozumiem Harzallah (1995, ryc. 2). Czy to prawdopodobnie odpowiada filtrowi nieskończonej odpowiedzi (IIR)?

IIR http://paulbourke.net/miscellaneous/ar/

W podsumowaniu:

  1. Pozyskaj środki z surowych danych
  2. Przekształcenie Fouriera Surowe dane
  3. Dane transformowane transformatą odwrotną Fouriera.
  4. Filtruj wynik za pomocą IIR

Być może mógłbyś użyć filtra IIR bez przechodzenia przez analizę Fouriera? Jedyną zaletą analizy Fouriera, jaką widzę, jest wyizolowanie i określenie, które wzorce mają wpływ i jak często powtarzają się (tj. Oscylują). Następnie możesz zdecydować o odfiltrowaniu tych, które wnoszą mniejszy wkład, na przykład stosując wąski filtr wycinający co najmniej przyczyniający się pik (lub filtr na podstawie własnych kryteriów). Na początek możesz odfiltrować mniej przyczyniające się doliny nieparzyste, które bardziej przypominają szum w „sygnale”. Hałas charakteryzuje się bardzo małą liczbą przypadków i brakiem wzoru. Filtr grzebieniowy o składowych nieparzystych częstotliwości może zmniejszyć szum - chyba że znajdziesz tam wzór.

Oto niektóre arbitralne grupowanie - wyłącznie w celach wyjaśniających: Czy widzisz hałas w dolinach?

Ups - jest do tego funkcja R !?

Podczas wyszukiwania filtra IIR odkryłem, że funkcje R interpolują w pakiecie Signal. Zapomnij o wszystkim, co do tej pory powiedziałem. Interpolacje powinny działać jak Harzallah: http://cran.r-project.org/web/packages/signal/signal.pdf

Pobaw się funkcjami. Powinien załatwić sprawę.


AKTUALIZACJA 3

interp1 nie interp

case.interp1 <- interp1(x=(ts.frame$no.influ.cases[!is.na(ts.frame$no.influ.case)]),y=ts.frame$yearday[!is.na(ts.frame$no.influ.case)],xi=mean(WEEKLYMEANSTABLE),method = c("cubic"))

Ustaw xi na oryginalne cotygodniowe środki.


Dziękuję bardzo za tę odpowiedź! Mój cel badawczy jest prosty: mam cotygodniowe środki i chcę otrzymywać codzienne szacunki, a średnia (interpolowana) codziennych szacunków w ciągu tygodnia powinna być równa średniej tygodniowej (tj. Pierwotnemu punktowi danych). Myślisz, że to możliwe ?. Ponadto nie rozumiem, co oznacza „głębia bitowa” i „analiza szczytowa” (nie mam żadnego doświadczenia z transformacjami Fouriera).
COOLSerdash

1
@COOLSerdash zobacz moją aktualizację. Tak to mozliwe! Ale musisz znaleźć najlepszy sposób porównania szacowanych średnich z ponownie zsyntetyzowanych szeregów czasowych z oryginalnymi średnimi z pierwotnych szeregów czasowych.
noumenal

(Przy okazji: jutro +1, nie mogę już dziś głosować). Wielkie dzięki za aktualizację, teraz jest wyraźniej. Pomyślałem o następującej procedurze: 1) dopasuj funkcję Fouriera do cotygodniowych metod regresji, 2) użyj prognoz regresji, aby „wypełnić” luki między wartościami tygodniowymi (tj. Uzyskać wartości dzienne) 3) dla co tydzień oblicz średnią wszystkich wartości dziennych, a ta średnia powinna być równa wartości początkowej. W artykule Epstein użył pewnego rodzaju współczynnika „korekcji”, aby wymusić, by funkcja miała pożądane właściwości, ale wciąż nie jestem pewien, jak to zrobić z regresją.
COOLSerdash

@COOLSerdash Zobacz aktualizację 2! Przejdź do ostatniego akapitu.
noumenal

Absolutnie fantastyczny! Dziękuję bardzo za badania. Zauważ, że udało mi się wdrożyć podejście Harzallaha za pomocą splajnów (liniowych i sześciennych). Więc chyba potrzebowałbym interp. Zredagowałem moje pytanie. Jeszcze raz wielkie dzięki.
COOLSerdash
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.