R: index() oder index.xts() ändert die Werte von Datum einer Zeitreihe, warum?
Möchte ich extrahieren Sie die Daten aus einer Zeitreihe, die mit getSymbols
aber wenn ich in der index /index.xts-Funktion die zurückgegebenen Termine erscheinen einen Tag früher.
Ich kann nicht verstehen, warum dieses Verhalten passiert in den folgenden code.
Jedoch, das beabsichtigte Verhalten ist, erhalten Sie eine Liste von Datum-Objekt entsprechend der in der ursprünglichen Zeitreihe.
Hier ist der code, beachten Sie den letzten Tag der Zeit-Serie SPY ist 24 Aug 2012, aber der Letzte Wert aus dem index(SPY) - Aufruf 23 Aug 2012:
getSymbols("SPY")
tail(SPY)
SPY.Open SPY.High SPY.Low SPY.Close SPY.Volume SPY.Adjusted
2012-08-17 142.23 142.30 141.86 142.18 90813700 142.18
2012-08-20 141.98 142.22 141.59 142.19 78255700 142.19
2012-08-21 142.54 143.09 141.45 141.76 105581100 141.76
2012-08-22 141.40 142.05 141.07 141.82 132999200 141.82
2012-08-23 141.47 141.48 140.44 140.66 111406800 140.66
2012-08-24 140.31 141.83 140.22 141.51 99431500 141.51
tail(index(SPY))
[1] "2012-08-16" "2012-08-19" "2012-08-20" "2012-08-21" "2012-08-22" "2012-08-23"
tail(index.xts(SPY))
[1] "2012-08-16" "2012-08-19" "2012-08-20" "2012-08-21" "2012-08-22" "2012-08-23"
Danke an alle, die Antworten auf meinen Beitrag.
Weitere Infos auf der Sitzung
>sessionInfo()
R version 2.15.1 (2012-06-22)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] rbenchmark_0.3.1 fGarch_2110.80.1
[3] fBasics_2160.81 MASS_7.3-20
[5] timeSeries_2160.95 timeDate_2160.95
[7] tseries_0.10-29 quadprog_1.5-4
[9] PerformanceAnalytics_1.0.4.4 quantstrat_0.6.8
[11] blotter_0.8.10 FinancialInstrument_0.15.2
[13] quantmod_0.3-17 TTR_0.21-1
[15] Defaults_1.1-1 xts_0.8-6
[17] zoo_1.7-7 lubridate_1.1.0
[19] stringr_0.6.1 plyr_1.7.1
[21] XML_3.9-4.1
loaded via a namespace (and not attached):
[1] colorspace_1.1-1 dichromat_1.2-4 digest_0.5.2 ggplot2_0.9.1
[5] grid_2.15.1 labeling_0.2 lattice_0.20-6 memoise_0.1
[9] munsell_0.3 proto_0.3-9.2 RColorBrewer_1.0-5 reshape2_1.2.1
[13] scales_0.2.1 stabledist_0.6-4 tools_2.15.1
> getDefaults(getSymbols)
NULL
> getSymbolLookup("SPY")
NULL
> showSymbols()
SPY GSPC IBM XLF XLP XLE XLY XLV XLI
"yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo"
XLB XLK XLU IEF AAPL DIA MSFT IWM EEM
"yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo"
EFA GLD AGG HYG FXE FXY VXX VXZ HIG
"yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo"
VTI VEU VNQ DBC XAU gold Gold STOXX50E GOLD
"yahoo" "yahoo" "yahoo" "yahoo" "oanda" "oanda" "oanda" "yahoo" "yahoo"
VIX DEXUSEU EURUSD DEXKOUS EUR=X INR=X
"yahoo" "FRED" "oanda" "FRED" "yahoo" "yahoo"
Beachten Sie auch, dass ich einige installiert, R-code aus der Systematischen Investor-blog, systematicinvestor.wordpress.com durch die Verwendung der Befehle
setInternet2(TRUE)
con = gzcon(url('systematicportfolio.com/sit.gz', 'rb'))
source(con)
close(con)
LÖSUNG PLUS ZUSÄTZLICHE FRAGE
GSEE umfasst user die Antwort gefunden (Danke!) wies darauf hin, dass in meiner session habe ich maskiert index.xts. So eine Lösung ist der Aufruf xts:::index.xts(SPY), anstatt nur den index.xts(SPY) das überschreiben der Maskierung.
In der Tat den Befehl
> tail(xts:::index.xts(SPY))
gibt die richtige Antwort
[1] "2012-08-17" "2012-08-20" "2012-08-21" "2012-08-22" "2012-08-23" "2012-08-24" –
Die Antwort jetzt aufgefordert, eine andere Frage: unter dem code für die "Maskierung/überschreiben" - index.xts-Funktion (das gibt die falsche Antwort, verschieben sich die Termine einen Tag früher):
> index.xts
function (
x # XTS object
)
{
temp = attr(x, 'index')
class(temp)='POSIXct'
if( attr(x, '.indexCLASS')[1] == 'Date')
temp = as.Date(temp)
return(temp)
}
Warum ist diese Funktion zurückgeben, die falsche Ergebnisse, wenn Sie aufgerufen Schwanz(index.xts(SPY)) ? Was ist falsch mit dem code von diesem index.xts-Funktion?
Vergleichen Sie die beiden output (der erste ist falsch, während die zweite die richtige Antwort):
tail(index.xts(SPY))
[1] "2012-08-16" "2012-08-19" "2012-08-20" "2012-08-21" "2012-08-22" "2012-08-23"
tail(xts:::index.xts(SPY))
[1] "2012-08-17" "2012-08-20" "2012-08-21" "2012-08-22" "2012-08-23" "2012-08-24"
Nochmals vielen Dank für Ihre Zeit und Aufmerksamkeit.
- Kann ich nicht reproduzieren. Fügen Sie bitte die Ausgabe von
sessionInfo()
zu Ihrer Frage. Auch die Ausgabe vongetDefaults(getSymbols)
undgetSymbolLookup("SPY")
wenn einer von Ihnen nichtNULL
und die Ausgabe vonshowSymbols()
- Danke GSEE umfasst für die Beantwortung meiner Botschaft, ich habe aktualisiert es mit den zusätzlichen Informationen über die session-Daten
- Es sieht aus wie Sie möglicherweise maskiert
index.xts
. Was passiert, wenn Sietail(xts:::index.xts(SPY))
? - beachten Sie auch, dass ich einige installiert, R-code aus der Systematischen Investor-blog, systematicinvestor.wordpress.com, indem Sie den Befehl setInternet2(TRUE); con = gzcon(url('systematicportfolio.com/sit.gz', 'rb')); source(con); close(con)
- GSEE umfasst, haben Sie das problem gefunden! hier ist die Ausgabe > Heck(xts:::index.xts(SPY)) [1] "2012-08-17" "2012-08-20" "2012-08-21" "2012-08-22" "2012-08-23" "2012-08-24"
- GSEE umfasst, habe ich an die post eine weitere Frage zu dem code von der "falschen" index.xts, wenn Sie Lust auf einen Blick. Danke!
- Weiter bestätigen. Der R-code aus der Systematischen Investor-blog, systematicinvestor.wordpress.com definiert den index.xts-Funktion verursacht die falsche Antwort.
- Ich bin mit xts (0.9-7), und die Berufung auf die index () - Befehl scheint, um die Datum/Zeit-Objekte falsch, wenn ich nicht setzen Sie die Umgebungsvariable " TZ. Hier erklärt: stackoverflow.com/questions/6374874/... Ändern meine Zeitzone GMT halfen mir, mal rechts. Es wurde " auf meinem Ubuntu-system. In einigen Fällen kann eine Verzögerung auch nur eines Tag auftreten kann, und Ihre korrupten Datensatz, daher denke ich, ist es eine gute Idee, um zu überprüfen, ob Sie immer die richtigen Zeiten mit xts-Objekte. Das merkwürdige ist, können die Objekte unterschiedlich dargestellt werden, bevor/nach mit index oder .index* Spaß
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieses Problem ist, dass Sie haben einige code, der Masken die
index.xts
Methode aus der xts Paket. In den Kommentaren von Ihrer OP, Sie erzählte uns, Sie lief dieser codeNach dem ausführen von code
index.xts
wurde neu definiert (eigentlich maskiert) werdenWenn Sie vergleichen, dass die
xts:::index.xts
Funktion maskiert wird, können Sie sehen, dass es ganz anders ist. So können Sie nicht mehr erwarten, die gleichen Ergebnisse.Wenn Sie die download-code aus systematicportfolio.com/sit.gz und schauen Sie es, Sie werden sehen, dass dieser Kommentar
So, es scheint, dass der Autor Tat dies absichtlich, in der Hoffnung, dass es schneller ist. Leider hat er auch weniger robust.
Dieser code tatsächlich gibt mir das gleiche Ergebnis wie
xts:::index.xts
, also ich bin nicht 100% sicher ist, warum Sie immer unterschiedliche Ergebnisse mit es. Aber, meine Vermutung ist, dass es hat zu tun mit dem ändern der Klasse vonnumeric
zuPOSIXct
und wandelt dann zurück zuDate
Sowieso, würde ich wahrscheinlich laufen
nach sourcing-code zum entfernen dieses "enhancement"."
sit.gz
, aber scheinbar ohne viel Erfolg.numeric
zuPOSIXct
. Es ist einas.POSIXct
Funktion für, die.xts:::index.xts
Konten für Zeitzone Unterschiede, während das "schneller" code nicht. Das ist, warum einige Menschen können sich nicht replizieren, dieses Verhalten.Könnte es sich lohnen, öffnen Sie eine saubere Kopie von R. bekomme ich (mit R 2.15.0):