Я, похоже, не могу получить to.weekly
и endpoints
(который используется to.weekly
) в xts, чтобы дать мне правильные дни конца недель для большинства типов данных даты. Я столкнулся с этой проблемой как с версиями XAN, так и с CRAN и R-Forge.xts to.weekly возвращает как по пятницам, так и по понедельникам в конце недели
Кажется, что это похоже, но не идентично обсуждаемой здесь проблеме: XTS to.weekly returns different weekly endpoints.
Для данных образца у меня есть функция to.weekly
по пятницам и понедельникам в течение разных недель по умолчанию indexAt="endof"
и по вторникам с indexAt="startof"
.
Я использую ежедневные возвращения в S & P 500 индекс:
library(quantmod)
getSymbols("^GSPC", from="1961-12-15", to="1962-01-15", src="yahoo")
weekdays(index(to.weekly(GSPC))) # Fridays and mondays
[1] "Monday" "Friday" "Friday" "Monday" "Monday"
Я попытался изменить часовой пояс объекта от моего часового пояса в UTC, моя система часовой пояс по Гринвичу и мой местный часовой пояс , и воссоздание объекта xts с использованием исходных дат, преобразованных в POSIXct. Ни одна из моих попыток не была успешной.
Единственный способ, которым я нашел, чтобы получить поведение, которое я ожидаю от to.weekly
, заключается в создании вектора дат как символьных строк, а затем преобразование их в POSIXct вместо Date для использования в качестве индекса для нового объекта xts , К сожалению, мне не удалось заставить это работать с моими фактическими данными.
dates <-
c("1961-12-15","1961-12-18","1961-12-19","1961-12-20","1961-12-21","1961-12-22",
"1961-12-26","1961-12-27","1961-12-28","1961-12-29","1962-01-02","1962-01-03",
"1962-01-04","1962-01-05","1962-01-08","1962-01-09","1962-01-10","1962-01-11",
"1962-01-12","1962-01-15")
data <- rep(1, length(dates))
p <- xts(data, order.by=as.POSIXct(dates))
d <- xts(data, order.by=as.Date(dates))
# Last day in the week, as expected
weekdays(index(to.weekly(p)))
# [1] "Friday" "Friday" "Friday" "Friday" "Friday" "Monday"
# First day in the week, as expected
weekdays(index(to.weekly(p, indexAt="startof")))
# [1] "Friday" "Monday" "Tuesday" "Tuesday" "Monday" "Monday"
# Mix of first and last days, not expected
weekdays(index(to.weekly(d)))
# [1] "Monday" "Friday" "Friday" "Monday" "Monday"
С использованием значений POSIXct для дат, казалось, работать с символьными значениями, я думал, что я хотел бы попробовать его с данными цены.
GSPCp <- xts(coredata(GSPC), order.by=as.POSIXct(index(GSPC)))
weekdays(index(to.weekly(GSPCp))) # Not as expected
[1] "Monday" "Friday" "Friday" "Monday" "Monday"
Я подозреваю, что проблема является временной зоны (и неопытности) вопрос, но я исчерпал все методы, которые я мог думать, чтобы получить его, чтобы вернуть значения с конца каждой недели в этих данных серии.
Я в настоящее время работает xts_0.9.874.
------ Edit ------
Как Walts указывает ниже, это, кажется, проблема с тем, что POSIXct использует Unix времени, который начинается на 1970-01-01 , Вероятнее всего, следует ожидать странного поведения для дат до этого времени.
Сегодня я провел несколько экспериментов, добавив 17 лет и 4 височных дня, чтобы сменить индекс на 1978-1979 годы, который разделяет те же дни недели в те же даты, что и в 1961-1962 годах. Конечно же, to.weekly
прекрасно работает на одних и тех же данных сдвинут в точку после 1970 года
d <- GSPC
index(d) <- index(d)+365*17+4 # 1978-1979
weekdays(index(to.weekly(d)))
[1] "Friday" "Friday" "Friday" "Friday" "Friday" "Monday"
Поскольку это, кажется, врожденное качество работы с POSIX времени, я не считаю, что это проблема с мое использование to.weekly
или endpoints
больше, а скорее структурная проблема с форматом времени. Мне нужно найти другой метод для определения конечных точек недель для дат до 1970 года.
Это, по-видимому, проблема с часовым поясом. Ваша фактическая проблема с данными, возвращаемыми 'getSymbols'? –
Другая проблема заключается в том, что 1970-01-01 используется как начало POSIXct раз. xts использует POSIX.ct и поэтому, похоже, имеет определенную чувствительность к этой дате. Если вы переместите свои даты на период в или после 1970 года, похоже, все работает. – WaltS
Данные от getSymbols кажутся прекрасными. Проблема, с которой я сталкиваюсь, что я не уверен, как принудить индекс объекта xts, предоставленный 'getSymbols', в форму, которую' endpoints' или 'to.weekly' могут использовать для точного вывода в конце недели , –