У меня есть рама данных о запасе ежедневно, с которого обращение получения годовых возвратов:
> head(df)
Date .SXQR .SXTR .SXNR .SXMR .SXAR .SX3R .SX6R .SXFR .SXOR .SXDR
1 2000-01-03 364.94 223.93 489.04 586.38 306.56 246.81 385.36 403.82 283.78 455.39
2 2000-01-04 345.04 218.90 474.05 566.15 301.13 239.24 374.64 390.41 275.93 434.92
3 2000-01-05 338.22 215.88 464.20 542.29 298.22 239.55 373.26 383.48 272.54 430.05
4 2000-01-06 343.13 218.18 470.82 529.33 300.69 249.75 377.26 383.48 272.47 434.15
5 2000-01-07 349.46 220.10 478.87 531.65 306.50 255.17 381.19 390.23 273.76 447.02
6 2000-01-10 356.20 223.01 484.07 581.82 310.84 252.75 387.74 393.75 278.76 453.80
Я способен вычислять это с:
percent_change2 <- function(x)last(x)/first(x) - 1 # que son last y first?
> yearly_return <- df %>%
+ group_by(gr = floor_date(Date, unit = "year")) %>%
+ summarize_at(vars(-Date, -gr), percent_change2) %>%
+ ungroup()
Но он возвращает мне Nas в некие годы. Действительно:
Тогда, когда я пробую производить xts, у меня есть проблемы:
> # Generamos el xts, indicando la columna con la info de tiempo
> yearly_return <- xts(monthly_return[,-1], order.by=monthly_return$gr)
Error in xts(monthly_return[, -1], order.by = monthly_return$gr) :
order.by requires an appropriate time-based object
Файл данных здесь.
Для rerproducir df
:
library(dplyr)
library(lubridate)
df <- read.xlsx("Data.xlsx", sheet = "Sector-STOXX600", startRow = 2,colNames = TRUE, detectDates = TRUE, skipEmptyRows = FALSE)
df[2:19] <- data.matrix(df[2:19])
Даже, если у меня нет больше проблем с недостающими данными, я все еще не могу вычислять годовые возвраты.
> # Replacing missing values
> nas <- which(apply(df[, -1], 1, FUN=function(x) any(is.na(x))))
> # Vemos de forma ordenada con los valores anteriores y posteriores
> # Solo para verificar
> ver <- c(nas, nas - 1, nas + 1)
> ver <- ver[order(ver)]
> # Imputamos con el promedio entre el valor anterior y el posterior
> df[nas, -1] <- (df[nas-1,-1] + df[nas+1,-1])/2
>
> yearly_return <- df %>%
+ group_by(gr = floor_date(Date, unit = "year")) %>%
+ summarize_at(vars(-Date, -gr), percent_change2) %>%
+ ungroup() %>%
+
+ # Generamos el xts, indicando la columna con la info de tiempo # ISSUE : there is nas
+ yearly_return <- xts(yearly_return[,-1], order.by=yearly_return$gr)
Error in xts(yearly_return[, -1], order.by = yearly_return$gr) :
object 'yearly_return' not found
Она imputaciГіn недостающей стоимости это длинная и глубокая тема, не sГ©, если были написаны книги, но capГ-tulos полные на этом, страховке. Есть много paqueterГ - чтобы для манипулировать особенно этой темой: MICE
, Amelia
, missForest
, Hmisc
, mi
, tidyimpute
, и т.д. я комментирую это Тебе просто для того, чтобы размеры величина проблемы.
В принципе, segГєn то, что ты говоришь ты alcanzarГ - чтобы с использовать средний показатель между предыдущей стоимостью и следующим. Это относительно простое решения. Следующий cГіdigo это делает, но понимая, что из-за каждых NA
, у тебя есть предыдущая стоимость и последующий один, которого нет NA
, что я смог проверять, что действительно в твоем случае он asГ-. Если у тебя были "пустоты" NA´s
mГЎs большие, или если бы первый или Гєltimo стоимость они это пошли, нужно думать одну soluciГіn mГЎs сложная.
Сначала мы получаем линии dГіnde какая-то из колонн снаружи NA
nas <- which(apply(df[, -1], 1, FUN=function(x) any(is.na(x))))
Можем проверять их:
# Vemos de forma ordenada con los valores anteriores y posteriores
# Solo para verificar
ver <- c(nas, nas - 1, nas + 1)
ver <- ver[order(ver)]
df[ver,]
# A tibble: 21 x 19
Date .SXQR .SXTR .SXNR .SXMR .SXAR .SX3R .SX6R .SXFR .SXOR .SXDR .SX4R
<dttm> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 2001-01-22 00:00:00 353. 223. 421. 540. 289. 282. 400. 469. 280. 529. 424.
2 2001-01-23 00:00:00 354. 222. NA NA NA NA NA NA NA NA NA
3 2001-01-24 00:00:00 354. 225. 426. 548. 287. 282. 400. 481. 282. 531. 425.
4 2001-02-21 00:00:00 342. 226 406. 487. 310. 298. 411. 454. 283. 562. 440.
5 2001-02-22 00:00:00 343. 227. NA NA NA NA NA NA NA NA NA
6 2001-02-23 00:00:00 335. 226. 399. 487. 300. 298. 403. 440. 283. 553. 432.
7 2003-04-30 00:00:00 262. 131. 184. 193. 193. 254. 293. 242. 202. 363. 282.
8 2003-05-01 00:00:00 261. 131. NA NA NA NA NA NA NA NA NA
9 2003-05-02 00:00:00 262. 132. 184. 190. 193. 246. 296. 241. 203. 371. 283.
10 2003-12-23 00:00:00 317. 174. 231. 235. 245. 264. 337. 296. 249. 401. 327.
# ... with 11 more rows, and 7 more variables: .SXRR <dbl>, .SXER <dbl>, .SXKR <dbl>,
# .SX7R <dbl>, .SX8R <dbl>, .SXIR <dbl>, .SXPR <dbl>
И сейчас sГ - мы делаем она imputaciГіn конец:
# Imputamos con el promedio entre el valor anterior y el posterior
df[nas, -1] <- (df[nas-1,-1] + df[nas+1,-1])/2
# Resultado
df[ver,]
# A tibble: 21 x 19
Date .SXQR .SXTR .SXNR .SXMR .SXAR .SX3R .SX6R .SXFR .SXOR .SXDR .SX4R
<dttm> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 2001-01-22 00:00:00 353. 223. 421. 540. 289. 282. 400. 469. 280. 529. 424.
2 2001-01-23 00:00:00 353. 224. 423. 544. 288. 282. 400. 475. 281. 530. 425.
3 2001-01-24 00:00:00 354. 225. 426. 548. 287. 282. 400. 481. 282. 531. 425.
4 2001-02-21 00:00:00 342. 226 406. 487. 310. 298. 411. 454. 283. 562. 440.
5 2001-02-22 00:00:00 338. 226. 402. 487. 305. 298. 407. 447. 283. 558. 436.
6 2001-02-23 00:00:00 335. 226. 399. 487. 300. 298. 403. 440. 283. 553. 432.
7 2003-04-30 00:00:00 262. 131. 184. 193. 193. 254. 293. 242. 202. 363. 282.
8 2003-05-01 00:00:00 262. 131. 184. 192. 193. 250. 294. 242. 202. 367. 282.
9 2003-05-02 00:00:00 262. 132. 184. 190. 193. 246. 296. 241. 203. 371. 283.
10 2003-12-23 00:00:00 317. 174. 231. 235. 245. 264. 337. 296. 249. 401. 327.
# ... with 11 more rows, and 7 more variables: .SXRR <dbl>, .SXER <dbl>, .SXKR <dbl>,
# .SX7R <dbl>, .SX8R <dbl>, .SXIR <dbl>, .SXPR <dbl>
NA
), в таком этом особенном случае как добро señ крылья в одном из твоих комментариев, было нужно брать несколько переменных, чтобы моделировать поведению histó богатые. – Hubert Ronald 18.03.2019, 22:54yearly_return
. Но не rstudio не я день сообщение ошибки, которая помогает мне понимать потому что. Actualicé вопрос – IggyPass 19.03.2019, 20:20ungroup() %>%
ты продолжаешь считать открытым pipe, удаляет этот конечный pipe, я думаю, что deberí чтобы функционировать. – Patricio Moracho 19.03.2019, 20:30