2013-05-02 11 views
8

Posiadam dane do darmowych miejsc parkingowych na godziny i dni.R funkcja kołowa LOESS w ciągu 24 godzin (dzień)

Oto losowa próbka 100.

sl <- list(EmptySlots = c(7, 6, 20, 5, 16, 20, 24, 5, 24, 24, 15, 11, 
8, 6, 13, 2, 21, 6, 1, 6, 9, 1, 8, 0, 20, 9, 20, 11, 22, 24, 
1, 2, 12, 6, 8, 2, 23, 18, 8, 3, 20, 2, 1, 0, 5, 21, 1, 4, 20, 
15, 24, 12, 4, 14, 2, 4, 20, 16, 2, 10, 2, 1, 24, 9, 22, 7, 6, 
3, 20, 13, 1, 16, 12, 5, 2, 7, 4, 1, 6, 1, 1, 2, 0, 13, 24, 6, 
13, 7, 24, 24, 15, 6, 10, 1, 2, 9, 5, 2, 11, 15), hour = c(8, 
16, 23, 14, 18, 7, 17, 15, 19, 19, 17, 17, 16, 14, 17, 12, 19, 
10, 10, 13, 16, 10, 16, 11, 12, 9, 0, 15, 16, 21, 10, 11, 17, 
11, 16, 15, 23, 7, 16, 14, 18, 14, 14, 9, 15, 2, 10, 9, 19, 17, 
20, 16, 12, 17, 12, 9, 23, 9, 15, 17, 10, 12, 18, 17, 18, 17, 
13, 10, 7, 8, 10, 18, 11, 11, 12, 17, 12, 9, 14, 15, 10, 11, 
10, 10, 20, 16, 18, 15, 21, 18, 17, 13, 8, 11, 15, 16, 11, 9, 
12, 18)) 

Szybkim sposobem obliczenia funkcji lessowe poprzez ggplot2.

sl <- as.data.frame(sl) 
library(ggplot2) 
qplot(hour, EmptySlots, data=sl, geom="jitter") + theme_bw() + stat_smooth(size = 2) 

enter image description here Jaki jest najlepszy sposób, aby powiedzieć, że funkcja lessowe 0 i 24 są sąsiedzi? tj. linia po lewej i po prawej stronie powinna mieć tę samą wartość, jeśli mamy ją oszacować w ten sposób.

Wskaźniki od czego zacząć będą dobrze.

+4

Duplicated swoje dane po obu stronach, więc masz trzy kopie. Następnie utrzymuj tylko część pasującą do środkowej części. – joran

Odpowiedz

9

będę kuszony tylko do replikacji danych na obu stronach:

library(ggplot2) 
empty <- c(7, 6, 20, 5, 16, 20, 24, 5, 24, 24, 15, 11, 8, 6, 13, 2, 21, 6, 1, 6, 9, 1, 8, 0, 20, 9, 20, 11, 22, 24, 1, 2, 12, 6, 8, 2, 23, 18, 8, 3, 20, 2, 1, 0, 5, 21, 1, 4, 20, 15, 24, 12, 4, 14, 2, 4, 20, 16, 2, 10, 2, 1, 24, 9, 22, 7, 6, 3, 20, 13, 1, 16, 12, 5, 2, 7, 4, 1, 6, 1, 1, 2, 0, 13, 24, 6, 13, 7, 24, 24, 15, 6, 10, 1, 2, 9, 5, 2, 11, 15) 
hour <- c(8, 16, 23, 14, 18, 7, 17, 15, 19, 19, 17, 17, 16, 14, 17, 12, 19, 10, 10, 13, 16, 10, 16, 11, 12, 9, 0, 15, 16, 21, 10, 11, 17, 11, 16, 15, 23, 7, 16, 14, 18, 14, 14, 9, 15, 2, 10, 9, 19, 17, 20, 16, 12, 17, 12, 9, 23, 9, 15, 17, 10, 12, 18, 17, 18, 17, 13, 10, 7, 8, 10, 18, 11, 11, 12, 17, 12, 9, 14, 15, 10, 11, 10, 10, 20, 16, 18, 15, 21, 18, 17, 13, 8, 11, 15, 16, 11, 9, 12, 18) 
emptyrep <- rep.int(empty,3) 
hourrep <- c(hour,hour+24,hour-24) 
sl <- data.frame(empty=emptyrep, hour=hourrep) 
qplot(hour, empty, data=sl, geom="jitter") + theme_bw() + geom_smooth(method="loess",size = 1.5,span=0.2) + coord_cartesian(xlim=c(0,24)) 

enter image description here

... tak jak Joran powiedział kilka minut wcześniej (woops)

+0

Zrobiłeś legwork, zarobiłeś rep. :) – joran

+0

To wydaje się być najprostszym rozwiązaniem. Wydaje mi się, że wydajność (brak powielania danych) nie jest ważna w dobie taniego przetwarzania. – Rico

+0

Gdybyś miał milion punktów, to z pewnością byłaby marnotrawstwem. Możesz zrobić to lepiej, powtarzając tylko punkty, które "mają znaczenie" - które mieszczą się w zakresie używanym przez lessę. Ale jeśli używasz wartości domyślnych, a ładuje się ten zakres, nie wiesz, jakie są odpowiednie przęsła. Alternatywą jest użycie metody obliczeniowej, która robi to automatycznie (możesz spojrzeć na periodic.lowess w princoreve na coś, co musiałbyś przekształcić twoje dane do użycia), ale to odmienia wydajność pamięci na znacznie dłuższy czas obliczeń - a dość wspólny kompromis. –

Powiązane problemy