Я должен вычислять коэффициент 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
Если ты знаешь форму, более легкую для того, чтобы это быть сделанным, что моя попытка: мне хотелось бы слушать ее!
Где И это средняя величина всех отклонений в абсолютной стоимости для всех пар статистической заученной переменной:
И М - средний ввод информации:
Однако, пока вычисляется средний показатель 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 ?
Я не понимаю этот код и возврати странные вещи:
> 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])
Я не знаю, потому что не 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)
Использовав 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))
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)