Вычислять месячные результаты начиная с рамы данных для индекса Gini

Я должен вычислять коэффициент Gini (рассеивание взвешивания ассигнования) в 18 секторных ETF с историческими доступными данными с 2000. Далее появляется краткое содержание:

> 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

Если ты знаешь форму, более легкую для того, чтобы это быть сделанным, что моя попытка: мне хотелось бы слушать ее!

Мой пробовал

Я знаю, что индекс G равен в Ingrese la descripción de la imagen aquí

Где И это средняя величина всех отклонений в абсолютной стоимости для всех пар статистической заученной переменной:

enter the description of the image here

И М - средний ввод информации:

introducir la descripción de la imagen aquí

Однако, пока вычисляется средний показатель portfolio_monthly_returns, М я получаю эту ошибку: argument is not numeric or logical: returning NA.

Идеи Патрисио Морачо я верю portfolio_monthly_returns with:

library(quantmod)
portfolio_monthly_returns=lapply(xts(df[,-1],order.by = df$Date),monthlyReturn) # What is monthlyReturn here ?

Я не понимаю этот код и возврати странные вещи:

enter image description here

> mean(portfolio_monthly_returns)
[1] NA
Warning message:
In mean.default(portfolio_monthly_returns) :
  argument is not numeric or logical: returning NA

Дата

Файл данных этот here.

Чтобы получать 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])

Remark

Я не знаю, потому что не involve песо:

cov = cor(NewData)
# ERC algorithm
Sigma = cov
w = optimalPortfolio(Sigma = Sigma,control = list(type = 'erc', constraint = 'lo'))

w = matrix(w, 1, 18)
(Sigma %*% t(w)) * c(w)

1
задан 20.03.2019, 19:29
1 ответ

Использовав lapply ты получаешь список, специальный объект в R, который он позволяет сохранять любой informaciГіn в каждый posiciГіn. Ты можешь получать ее informaciГіn с [[ ]]

portfolio_monthly_returns[[2]]
summary(portfolio_monthly_returns[[2]])
# > summary(portfolio_monthly_returns[[2]])
# Index                     monthly.returns    
# Min.   :2000-01-31 00:00:00   Min.   :-0.192013  
# 1st Qu.:2004-07-22 12:00:00   1st Qu.:-0.025159  
# Median :2009-01-14 12:00:00   Median : 0.011340  
# Mean   :2009-01-13 17:06:40   Mean   : 0.005112  
# 3rd Qu.:2013-07-06 06:00:00   3rd Qu.: 0.039820  
# Max.   :2017-12-29 00:00:00   Max.   : 0.185749 

, Чтобы получать informaciГіn каждого элемента списка используй какую-то funciГіn семьи apply.

(medias <- sapply(portfolio_monthly_returns,mean, na.rm=T) )
# .SXQR         .SXTR         .SXNR         .SXMR         .SXAR         .SX3R 
# 0.0079624616  0.0051118966  0.0047279229  0.0012964127  0.0088333150  0.0082043648

Другая альтернатива состоит в том, чтобы преобразовывать в объект matricial

monthly_returns_df=do.call("cbind",portfolio_monthly_returns)
colnames(monthly_returns_df)=colnames(dData[,-1])

Так данные estГЎn в колоннах и ты можешь получать информацию

means=apply(monthly_returns_df, 2, mean,na.rm=T)
all.equal(medias,means)  #TRUE

covs =cov(monthly_returns_df,use = "pairwise.complete.obs")

w = optimalPortfolio(Sigma = covs,control = list(type = 'erc', constraint = 'lo'))
pie(w,labels = colnames(monthly_returns_df))

introducir la descripción de la imagen aquí

w = matrix(w, 1, 18)
(covs %*% t(w)) * c(w)
# > (covs %*% t(w)) * c(w)
# [,1]
# .SXQR 9.238799e-05
# .SXTR 9.238799e-05
# .SXNR 9.238799e-05

, Изданные

С relaciГіn в главный вопрос. В этом artГ-заду THE MEAN-GINI EFFICIENT PORTFOLIO FRONTIER, Те Хоурналь of Финансиаль Ресеарч, Vol. XXVIII, Нет. 1, Pag 59†“75, 2005, показывают, что Г-ndice Gini был бы вычислен с нею fГіrmula:

Gp=2 cov (rp, Fp) = 2 Sum wi cov (ri, Fp) = 2 w'K (r, Fp)

, Где K (r, Fp) - вектор ковариантности результата активов с CDF (distribuciГіn накопленная empГ-богатая) портфеля.

Способ это получать был бы:

GiniP= function(w,rets){
    RetSPort=apply(rets,1,function(x)sum(x*w))

    Fn <- ecdf(RetSPort)
    Fp=Fn(RetSPort)
    # xs=sort(RetSPort,)
    # rank(xs)/length(xs)
    Krp=apply(rets,2,function(x)cov(x,Fp))
    2*sum(w*Krp)
  }
  GiniP(w,monthly_returns_df)
0
ответ дан 02.12.2019, 05:28
  • 1
    Большое спасибо! Однако ты знаешь, как вычислять И используя то, что ты предлагаешь? –  IggyPass 27.03.2019, 22:44
  • 2
    Я не уверен, что это была fó rmula. Ты можешь показывать, что qual - шрифт essa fó rmula? В этом artí зад они показывают другую для портфелей: The Journal of Финансиаль Ресеарч, Vol. XXVIII, Нет. 1, Pag 59†“75, 2005 " THE MEAN-GINI EFFICIENT PORTFOLIO FRONTIER" –  Robert 28.03.2019, 20:55