#r
#r
Вопрос:
У меня небольшая проблема, связанная с преобразованием данных во временные ряды. Вот шаги, которые я выполнил. Мои данные находятся в диапазоне с 21 января 2014 года по 28 февраля 2019 года и состоят из имен столбцов, цены и даты.
1. Я импортировал данные из Excel, используя read.csv().
interest<-read.csv("C:/Users/Kane/interest.csv", stringsAsFactors=F, header=T)
длина данных = 1146
2. Были некоторые отсутствующие даты и значения. Я применил na_interpolation().
library("imputeTS")
interest<-na_interpolation(interest$Price)
длина данных становится 1864
3. Я вычислил доходность, используя diff (log (процентная цена в долларах США))
returns<-diff(log(interest$Price))
4. Я преобразовал результаты во временные ряды.
return.ts<-ts(data=returns,frequency=365,start=c(2014,1), end=c(2019,2))
длина данных стала 1832.
Могу ли я получить объяснение, почему при преобразовании во временные ряды длина данных резко сократилась, и, пожалуйста, решение.
Образец моих данных:
> interest
Date Price
1 2014-01-22 3.820000
2 2014-01-23 3.802857
3 2014-01-24 3.785714
4 2014-01-25 3.768571
5 2014-01-26 3.751429
6 2014-01-27 3.734286
> dput(head(interest))
structure(list(Date = structure(c(16092, 16093, 16094, 16095,
16096, 16097), class = "Date"), Price = c(3.82, 3.80285714285714,
3.78571428571429, 3.76857142857143, 3.75142857142857, 3.73428571428571
)), .Names = c("Date", "Price"), row.names = c(NA, 6L), class = "data.frame")
Результаты при преобразовании возвращаются в ts:
> return1<-ts(Return,frequency=365,start=c(2014,1),end=c(2019,2))
> length(return1)
[1] 1827
> return<-ts(Return,frequency=365,start=c(2014,1),end=c(2018,11))
> length(return)
[1] 1471
> return<-ts(Return,frequency=365,start=c(2014,1),end=c(2018,12))
> length(return)
[1] 1472
Комментарии:
1. привет, пожалуйста, предоставьте небольшую выборку ваших данных, чтобы мы могли лучше понять вашу проблему. Лучший способ сделать это — опубликовать выходные данные
dput(head(interest))
в вашем вопросе.2. @Cettt Привет, я выполнил то, что вы сказали мне сделать, я отредактировал свой вопрос и включил выходные данные
3. На вашем шаге 1 длина данных
interest
равна 1146. После выполненияna.interpolation()
вы говорите, что длина ваших данных становится 1864. Правильно ли это? Я полагаю, что эти длины данных относятся к длине определенного столбца, правильно?4. @VictorMaxwell Да, это стало 1864 годом, поскольку отсутствовали даты. После того, как я добавил недостающую дату, я выполнил na.интерполяцию для цены.
Ответ №1:
Не уверен, о чем вы спрашиваете, но, возможно, это помогает. Я использовал ваши образцы данных, и очевидно, что вы ничего в них не пропустили, поэтому первый шаг следует пропустить (кроме того, вы не предоставили нам пакет na.interpolation
).
Однако здесь ваши данные:
Date Price
1 2014-01-22 3.820000
2 2014-01-23 3.802857
3 2014-01-24 3.785714
4 2014-01-25 3.768571
5 2014-01-26 3.751429
6 2014-01-27 3.734286
Теперь добавление diff
функции приведет к тому, что в данных станет на одно наблюдение меньше:
returns
[1] -0.004497759 -0.004518080 -0.004538586 -0.004559278 -0.004580161
Теперь вы можете применить ts
функцию и добавить начало с первого дня, представляющего собой ежедневный временной ряд:
ts(data=returns,frequency=365,start = decimal_date(as.Date("2014-01-22")))
Time Series:
Start = c(2014, 22)
End = c(2014, 26)
Frequency = 365
[1] -0.004497759 -0.004518080 -0.004538586 -0.004559278 -0.004580161
Комментарии:
1. Большое вам спасибо. У меня это сработало действительно отлично.