2016-04-02 18 views
2

Ich habe eine Zeitreihe von 540 Beobachtungen, die ich 999-mal mit dem folgenden Code sampeln:Wie Ergebnisse von Bootstrapping in R exportieren?

boot.mean = function(x,i){boot.mean = mean(x[i])} 
z1 = boot(x1, boot.mean, R=999) 
z1 
ORDINARY NONPARAMETRIC BOOTSTRAP 

Call: 
boot(data = x1, statistic = boot.mean, R = 999) 

Bootstrap Statistics : 
     original  bias std. error 
t1* -0.009381397 -5.903801e-05 0.002524366 

versucht, die Ergebnisse gibt mir die folgende Fehlermeldung zu exportieren:

write.csv(z1, "z1.csv") 

Error in as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors = stringsAsFactors) : 
    cannot coerce class ""boot"" to a data.frame 

Wie kann ich den Export Ergebnisse in eine CSV-Datei?

Ich erwarte eine Datei mit 540 Beobachtungen 999 mal, und das Ziel ist, die approx_entropy Funktion aus dem pracma Paket zu verwenden, um 999 Werte für ungefähre Entropie zu erhalten und die Verteilung in Latex zu plotten.

+1

Hinweis: siehe str (z1). – Heroka

+0

Danke. Ich habe versucht 'write.csv (str (z1)," z1.csv ")' aber die Datei z1.csv ist leer. –

+0

Ich meinte, schau dir die Ausgabe davon an. Die Werte werden in z1 $ t gespeichert. – Heroka

Antwort

3

Zuerst stellen Sie bitte sicher, dass Ihr Beispiel reproduzierbar ist. Sie können dies tun, indem Sie ein kleines x1 Objekt zu erzeugen, oder durch einen zufälligen x1 Vektor zu erzeugen:

> x1 <- rnorm(540) 

nun aus Ihrer Frage:

I am expecting to obtain a file with 540 observations 999 times

Dies ist jedoch nicht das, was Sie erhalten. Sie generieren 999 Wiederholungen des Mittelwert der neu abgetasteten Daten. Das bedeutet, dass jedes Bootstrap-Replikat eine einzelne Nummer ist.

Von Heroka Kommentar:

Hint: look at str(z1).

Die Funktion str Sie die aktuellen Daten innerhalb des z1 Objekt zeigt, ohne die hübsche Formatierung.

> str(z1) 
List of 11 
$ t0  : num 0.0899 
$ t  : num [1:999, 1] 0.1068 0.1071 0.0827 0.1413 0.0914 ... 
$ R  : num 999 
$ data  : num [1:540] 1.02 1.27 1.82 -2.92 0.68 ... 
(... lots of irrelevant stuff here ...) 
- attr(*, "class")= chr "boot" 

So Ihre Originaldaten als z1$data gespeichert, und die Daten, die Sie bootstraped haben, die die jedes Resampling bedeuten, wird in z1$t gespeichert. Beachten Sie, wie es Ihnen die Dimension jedes Schlitzes sagt: z1$t ist 999 x 1.

Nun, was Sie wahrscheinlich tun möchten, ist ändern Sie die boot.mean Funktion durch eine boot.identity Funktion, die einfach die neu abgetasteten Daten zurückgibt. Es geht so:

> boot.identity = function(x,i){x[i]} 
> z1 = boot(x1, boot.identity, R=999) 
> str(z1) 
List of 11 
$ t0  : num [1:540] 1.02 1.27 1.82 -2.92 0.68 ... 
$ t  : num [1:999, 1:540] -0.851 -0.434 -2.138 0.935 -0.493 ... 
$ R  : num 999 
$ data  : num [1:540] 1.02 1.27 1.82 -2.92 0.68 ... 
(... etc etc etc ...) 

Und Sie können diese Daten mit write.csv(z1$t, "z1.csv") speichern.

+0

Genau das habe ich gesucht. Vielen Dank. –