Probleme mit Grafik in Zeitreihe

Methoden der Zeitreihenanalyse

Moderator: schubbiaschwilli

retep
Beiträge: 99
Registriert: Do Sep 06, 2018 7:50 pm

Probleme mit Grafik in Zeitreihe

Beitrag von retep »

Hallo alle miteinander,

da ich komplett neu hier bin, bitte ich zu entschuldigen wenn ich etwas mit "der Tür ins Haus falle" um um Hilfe zu bitten. Zumindest konnte ich lesen, dass ich noch keine private Nachrichten verschicken darf. Aber darum geht es mir nicht. Als Newcomer in R als Programmiersprache erhoffe ich mir Hilfe und Unterstützung zum Thema "Zeitreihenanalyse".

Mir geht es im Rahmen eines größeren Projektes darum zunächst an Zufallsvariablen eine automatische Messtation für Grundwasser zu
simulieren. Diese fiktive Messstation soll zunächst für den Zeitraum von 12 Monaten kontinuierlich im 60-minütigen Rhythmus Daten sammeln. Später
sollen diese Daten per Zeitreihenanalyse untersucht werden inwieweit saisonale Schwankungen die Grundwasserchemie im Untersuchungsgebiet
beeinflussen.

Zum Anfang wollte ich nur eine einfache Zeitreihe erstellen wie sie als Vorlage unter dieser Webseite: http://www.faes.de/Basis/Basis-Statisti ... yse_r.html erstellt worden ist.

Hier ist der zugehörige Code, welchen ich zu diesem Zweck erstellt habe:

#Erzeugung normalverteilter Variablen

ph <- round(rnorm(8760,6, sd = 1), 2)

# Erzeugung des Zeitrahmens
zeitpunkte_year<- seq(from = as.POSIXct("2018-01-01 00:00"),
to = as.POSIXct("2018-12-31 23:00"), by = "hour")
# Trennung von Date and Time
zeitpunkte_year_sep <- data.frame(Date = as.Date(zeitpunkte_year, format =
"%B/%d/%Y"),
Time = format( as.POSIXct( zeitpunkte_year, format =
"%m/%d/%Y %H:%M"),
format = "%H:%M %p") )
# Separieren des Datums mit anschließender Umformatierung

library(stringi)
library(tidyr)
library(tidyselect)
d <- data.frame(date = zeitpunkte_year_sep$Date)
d <- separate (d, "date", c("Year", "Month", "Day"), sep = "-")
d
e <- revalue(d$Month, c("01"="Januar", "02"="Februar", "03"="März", "04" =
"April", "05" = "Mai", "06" = "Juni", "07"="Juli", "08" = "August", "09" =
"Septmember",
"10" = "Oktober", "11" = "November", "12" =
"Dezember"))

# Erzeugung Data frame

year_ph_t <- data.frame(f, ph)

#Zeitreihe
yearindex <- ts(year_ph_t$ph, freq = 356, start = c(2018,1) , end =
c(2018,12))
yearindex
Time Series:
Start = c(2018, 1)
End = c(2018, 12)
Frequency = 356
[1] 5.02 6.75 5.64 5.62 6.33 6.20 6.10 5.06 6.76 7.22 3.91 5.53

View(year_ph_t)
# A tibble: 8,760 x 3
Year Month ph
<chr> <chr> <dbl>
1 2017 12 5.02
2 2018 01 6.75
3 2018 01 5.64
4 2018 01 5.62
5 2018 01 6.33
6 2018 01 6.2
7 2018 01 6.1
8 2018 01 5.06
9 2018 01 6.76
10 2018 01 7.22

yearindex
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2018 5.02 6.75 5.64 5.62 6.33 6.20 6.10 5.06 6.76 7.22 3.91 5.53

Die Grafik die ich als Resultat bekomme, entspricht leider in keinster Weise den Erwartungen. Vielleicht kann mir jemand von Euch sagen, was ich falsch gemacht habe? Denn angehängte die Graphik entspricht leider nicht dem gewünschten Ergebnis. Ich hoffe sehr das der mitgelieferte Code nicht noch mehr Verwirrung stiftet? Ich freue mich sehr auf eine Rückmeldung und bedanke mich sehr im Voraus bei Euch allen.

Retep
Dateianhänge
Test_ph.png
Test_ph.png (8.21 KiB) 3100 mal betrachtet
Benutzeravatar
student
Beiträge: 674
Registriert: Fr Okt 07, 2016 9:52 am

Re: Probleme mit Grafik in Zeitreihe

Beitrag von student »

Hallo retep,
willkommen im Forum. Nur für das nächste Mal: Es gibt prima Formatierungsmöglichkeiten für Code (</>-Schaltfläche) und dadurch wird das Lesen einfacher.

Das gezeigte Beispiel auf der Seite faes.de... ist ein einfaches Beispiel, es geht nur um das Prinzip. Welche Erwartungen hast Du denn?

Auch bin ich ein Freund von einfachen Lösungen und stolpere über die Verknüpfung ts-Objekt und tibble-Strukturen. Ob sich das verträgt? (Du merkst, ich bin kein Freund der tidyverse-Philosophie.)
Viele Grüße,
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt
Das Ad-Oculos-Projekt auf YouTube

Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)
retep
Beiträge: 99
Registriert: Do Sep 06, 2018 7:50 pm

Re: Probleme mit Grafik in Zeitreihe

Beitrag von retep »

Hallo,

hab vielen Dank für die schnelle Rückmeldung! Allerdings bin ich ganz sicher ob ich verstanden habe, was du mit </> Formatierung meinst. Für die Unannehmlichkeiten entschuldige ich mich.

Also, der Reihe nach: Ich wollte einfach nur eine zum Testen eine einfache Zeitreihe über den Untersuchungszeitraum von 12 Monaten erstellen. Die fiktive Messstelle sammelt die Daten stündlich:

Code: Alles auswählen

zeitpunkte_year<- seq(from = as.POSIXct("2018-01-01 00:00"), 
                  to = as.POSIXct("2018-12-31 23:00"), by = "hour")
Hier die fiktiven Daten für den "ph-Wert":

Code: Alles auswählen

ph_year<- round(rnorm(8760,6, sd = 1), 2)
Das nächste Problem was sich mir stellte, war die Formatierung der Zeitsequenz. Ich wollte die Monate nicht als Zahl 01, 02, 03....sondern als Wort "Januar", "Februar"....Deswegen der umständliche Weg der Umformatierung mittels des Befehls "revalue". Ich wollte für jede Spalte, separat, Jahr, Monat, Tag, Zeit:

Code: Alles auswählen

zeitpunkte_year_sep <- data.frame(Date = as.Date(zeitpunkte_year, format = "%B/%d/%Y"),
                  Time = format( as.POSIXct( zeitpunkte_year, format = "%m/%d/%Y %H:%M"), 
                               format = "%H:%M %p") )
Mit dem Befehl "revalue" aus dem Package "stringi" sollte laut meiner Recherche dies gelingen:

Code: Alles auswählen

Monat <- revalue(d$Month, c("01"="Januar", "02"="Februar", "03"="März", "04" = "April", "05" = "Mai", "06" = "Juni", "07"="Juli", "08" = "August", "09" = "September", 
                        "10" = "Oktober", "11" = "November", "12" = "Dezember"))
Interessanterweise bekomme ich jetzt die Fehlermeldung: "Error in revalue(d$Month, c(`01` = "Januar", `02` = "Februar", `03` = "März", :
could not find function "revalue"


Beim ersten Versuch, war der Befehl erfolgreich. In meiner Datentabelle (siehe Anhang, Exceltabelle) habe ich alles schön auseinander genommen. Zwar ziemlich umständlich für den Anfang (bin ja auch blutiger Anfänger) - aber es macht Spaß und ich komme voran.

Jetzt wollte ich mit den Daten mir eine Zeitreihe anzeigen lassen um später diese - erstmal fiktive - Messstelle, wöchentlich, monatlich, quartalsweise auszuwerten. Stück für Stück wollte ich die zu messenden Variablen erweitern, der Realität anpassen um zum Schluss an realen Daten zu arbeiten.

Mittlerweile bin ich bei den Packages "zoo" , "forecast" und "xts" gelandet. Laut meiner Recherche kommen diese Packages viel besser mit Datenreihen klar. Nur leider ich nicht. Weil ich nicht weiß wie ich meine Daten dort ablegen muss. Die Beschreibung finde ich nicht ganz eindeutig - zumindest für mich. Sorry!

Hab nochmals vielen Dank für deine Geduld und Hilfe!

Viele Grüße,

Retep

PS: Ich vermute das mit der Formatierunsmöglichkeit hat wieder nicht funktioniert obwohl ich den Button für code benutzt habe: komisch. Nochmals Sorry für die Umstände.
Dateianhänge
Observation_year.xlsx
(296.52 KiB) 119-mal heruntergeladen
Zuletzt geändert von jogo am So Sep 09, 2018 9:27 am, insgesamt 1-mal geändert.
Grund: Formatierung
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Your first xts object

Beitrag von Athomas »

Die Beschreibung finde ich nicht ganz eindeutig - zumindest für mich. Sorry!
Welche Beschreibung meinst Du?
xts objects are simple. Think of them as a matrix of observations combined with an index of corresponding dates and times.

xts = matrix + times The main xts constructor takes a number of arguments, but the two most important are x for the data and order.by for the index. x must be a vector or matrix. order.by is a vector which must be the same length or number of rows as x, be a proper time or date object (very important!), and be in increasing order.
(aus: http://rstudio-pubs-static.s3.amazonaws ... fc671.html)
retep
Beiträge: 99
Registriert: Do Sep 06, 2018 7:50 pm

Re: Probleme mit Grafik in Zeitreihe

Beitrag von retep »

Hallo Athomas,

wow der Link zu xts ist Klasse! Den habe ich noch nicht gefunden! Ich werd diesen heute Abend ausprobieren. Ich gebe sofort Rückmeldung ob alles geklappt hat.

Zum Beispiel bei "Zoo". An welchem Punkt müssen meine Daten rein? bei dem Versuch die seq. Date von by = "1 day" auf by = 1 hour" zu ändern bekam ich einen Fehler angezeigt:

Code: Alles auswählen

Error in seq.Date(as.Date("2018/01/01"), as.Date("2018/12/31"), by = "1 hour") :  ungültige Zeichenkette für 'by'

Code: Alles auswählen

set.seed(2018)
dates <- seq(as.Date("2018/01/01"), as.Date("2018/12/31"), by = "1 day")
dates <- dates[sample(length(dates), 100)]
#We construct a sample data.frame
df <- data.frame(
  dates = dates,
  val = cumsum(runif(length(dates))))
#To turn df into a zoo timeseries, you can do the following:
library(zoo)
ts <- with(df, zoo(val, dates))
#Plotting
plot.zoo(ts)]
Nochmals vielen Dank für deine Hilfe,

retep
Zuletzt geändert von jogo am So Sep 09, 2018 9:25 am, insgesamt 1-mal geändert.
Grund: Formatierung
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Probleme mit Grafik in Zeitreihe

Beitrag von Athomas »

Eins vorweg: ich bin kein Zeitreihen-Spezi, d.h. ich habe nie ernsthaft damit gearbeitet, sondern nur ein wenig herumexperimentiert!

as.Date(...) erzeugt ein reines Datum, d.h. ohne den Zeitanteil - und dazu eine Stunde zu addieren ist nur beschränkt sinnvoll.
Warum bist Du nicht bei as.POSIXct geblieben - das klappt doch wunderbar!?

Code: Alles auswählen

library(xts)

zeitpunkte_jahr <- seq(from = as.POSIXct("2018-01-01 00:00"),
                       to   = as.POSIXct("2018-12-31 23:00"), by = "hour")
Daten           <- rnorm(length(zeitpunkte_jahr))
Zeitreihe       <- xts(x = Daten, order.by = zeitpunkte_jahr)
 
# Fertig ist die Zeitreihe...
Zuletzt geändert von Athomas am Sa Sep 08, 2018 5:55 pm, insgesamt 1-mal geändert.
retep
Beiträge: 99
Registriert: Do Sep 06, 2018 7:50 pm

Re: Probleme mit Grafik in Zeitreihe

Beitrag von retep »

Hey,

danke für die schnelle Hilfe!!!! Aber ich bekomme nur alleine beim Ausführen des Codes, welchen du mit geschickt hast, folgende Fehlermeldung:

Code: Alles auswählen

 # Fertig ist die Zeitreihe....
> zeitpunkte_jahr
Error: object 'zeitpunkte_jahr' not found
Ich arbeite heute Abend den Link zu der Webseite durch. Aber beim "Schnelldurchlauf" des Links habe ich nicht gesehen wie ich die Daten plotten kann.

Vielen Dank für deine schnelle Hilfe und es tut mir leid, falls ich nicht schnell genug kapiere...... :roll:

retep
Zuletzt geändert von jogo am So Sep 09, 2018 9:24 am, insgesamt 1-mal geändert.
Grund: Formatierung
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Probleme mit Grafik in Zeitreihe

Beitrag von Athomas »

Ja toll, da habe ich wohl eine Klamnmer nicht mitkopiert :(, es aber jetzt oben geändert.

Zur Grafik habe ich noch gar nichts gesagt...
retep
Beiträge: 99
Registriert: Do Sep 06, 2018 7:50 pm

Re: Probleme mit Grafik in Zeitreihe

Beitrag von retep »

Hej,

perfekt!!!!!! Siehe Anhang! Jetzt kann ich langsam aber sicher ans "hübsch" machen sowie an die zeitlich unterschiedliche Auswertung (Woche, Monat, Quartal, Halbjährlich) und an das plotten gehen!

Wenn ich das richtig verstanden habe, dann muss die Zeitreihe und die zu analysierende Variable zu unterschiedlichen Dateien gehören. Der Plot funktioniert nicht, wenn ich zum Beispiel zeitreihe_jahr$ph angeben würde! Habe ich das richtig verstanden?

Nochmals vielen Dank für deine wertvolle Hilfe & Unterstützung!
Dateianhänge
Testzeitreihe_ph.png
Testzeitreihe_ph.png (7.72 KiB) 3075 mal betrachtet
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Probleme mit Grafik in Zeitreihe

Beitrag von Athomas »

Wenn ich das richtig verstanden habe, dann muss die Zeitreihe und die zu analysierende Variable zu unterschiedlichen Dateien gehören.
Das hast Du wohl falsch verstanden, eine (xts-) Zeitreihe setzt sich lediglich aus zwei Komponenten zusammen...

Für Grafiken nehme ich immer ggplot2 (das ist der kleine Teil des tidyverse, in dem ich mich bewege :D ):

Code: Alles auswählen

library(xts)

zeitpunkte_jahr <- seq(from = as.POSIXct("2018-01-01 00:00"),
                       to   = as.POSIXct("2018-12-31 23:00"), by = "hour")
Daten           <- cumsum(rnorm(length(zeitpunkte_jahr)))
Zeitreihe       <- xts(x = Daten, order.by = zeitpunkte_jahr)
 
# Fertig ist die Zeitreihe...

library(ggplot2)

Grafik <- ggplot(Zeitreihe) +
  theme_bw() +
  geom_point(aes(x=Index, y=Daten), colour="blue", alpha=0.4, size=0.5) +
  geom_smooth(aes(x=Index, y=Daten), colour="darkgreen") 
print(Grafik)
Die Kurve ist lediglich eine Standard-Ausgleichskurve von ggplot (zu Demozwecken!) und hat nix mit Zeitreihenanalyse zu tun!
Antworten