2013-05-02 1 views
8

Ich habe Daten für kostenlose Parkplätze über Stunden und Tage.R kreisförmige LOESS-Funktion über 24 Stunden (ein Tag)

Hier ist eine Stichprobe von 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)) 

Eine schnelle Möglichkeit, eine LOESS Funktion über ggplot2 zu berechnen.

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

enter image description here Was ist der beste Weg, um die LOESS Funktion zu sagen, dass 0 und 24 Nachbarn sind? I.e. die Linie links und rechts sollte den gleichen Wert haben, wenn wir es so schätzen würden.

Zeiger auf, wo zu beginnen wird gut.

+4

Ihre Daten duplizierte auf jeder Seite, also hast du drei Kopien. Dann halte den Teil nur am Mittelstück fest. – joran

Antwort

9

ich nur versucht sein würde, die Daten auf beiden Seiten zu replizieren:

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

... wie joran ein früher paar Minuten sagte (woops)

+0

Sie haben die Beinarbeit gemacht, Sie haben den Vertreter verdient. :) – joran

+0

Das scheint die einfachste Lösung zu sein. Ich nehme an, dass Effizienz (keine Duplizierung Ihrer Daten) im Zeitalter des billigen Rechnens nicht wichtig ist. – Rico

+0

Wenn Sie eine Million Punkte hätten, wäre das definitiv verschwenderisch. Sie können es besser machen, indem Sie nur die Punkte replizieren, die "wichtig" sind - die in die von Löss verwendete Zeitspanne fallen. Aber wenn Sie Standardwerte und Bootstraps verwenden, die sich überspannen, wissen Sie nicht, was die relevanten Spannen a priori sind. Die Alternative besteht darin, eine Berechnungsmethode zu verwenden, die dies automatisch durchführt (Sie könnten periodic.lowess in princurve für etwas suchen, für das Sie Ihre Daten umwandeln müssen), aber das bedeutet eine höhere Speichereffizienz für eine viel höhere Rechenzeit - a ziemlich gewöhnlicher Kompromiss. –

Verwandte Themen