ism_vcov {SharpeR} | R Documentation |
Compute variance covariance of Inverse 'Unified' Second Moment
Description
Computes the variance covariance matrix of the inverse unified second moment matrix.
Usage
ism_vcov(X,vcov.func=vcov,fit.intercept=TRUE)
Arguments
X |
an |
vcov.func |
a function which takes an object of class |
fit.intercept |
a boolean controlling whether we add a column of ones to the data, or fit the raw uncentered second moment. |
Details
Given p
-vector x
with mean \mu
and
covariance, \Sigma
, let y
be x
with a one prepended. Then let
\Theta = E\left(y y^{\top}\right)
,
the uncentered second moment matrix. The inverse of
\Theta
contains the (negative) Markowitz portfolio
and the precision matrix.
Given n
contemporaneous observations of p
-vectors,
stacked as rows in the n \times p
matrix X
,
this function estimates the mean and the asymptotic
variance-covariance matrix of \Theta^{-1}
.
One may use the default method for computing covariance,
via the vcov
function, or via a 'fancy' estimator,
like sandwich:vcovHAC
, sandwich:vcovHC
, etc.
Value
a list containing the following components:
mu |
a |
Ohat |
the |
n |
the number of rows in |
p |
the number of assets. |
Note
By flipping the sign of X
, the inverse of
\Theta
contains the positive Markowitz
portfolio and the precision matrix on X
. Performing
this transform before passing the data to this function
should be considered idiomatic.
This function will be deprecated in future releases of this package. Users should migrate at that time to a similar function in the MarkowitzR package.
Author(s)
Steven E. Pav shabbychef@gmail.com
References
Pav, S. E. "Asymptotic Distribution of the Markowitz Portfolio." 2013 https://arxiv.org/abs/1312.0557
See Also
Examples
X <- matrix(rnorm(1000*3),ncol=3)
# putting in -X is idiomatic:
ism <- ism_vcov(-X)
iSigmas.n <- ism_vcov(-X,vcov.func="normal")
iSigmas.n <- ism_vcov(-X,fit.intercept=FALSE)
# compute the marginal Wald test statistics:
ism.mu <- ism$mu[1:ism$p]
ism.Sg <- ism$Ohat[1:ism$p,1:ism$p]
wald.stats <- ism.mu / sqrt(diag(ism.Sg))
# make it fat tailed:
X <- matrix(rt(1000*3,df=5),ncol=3)
ism <- ism_vcov(X)
wald.stats <- ism$mu[1:ism$p] / sqrt(diag(ism$Ohat[1:ism$p,1:ism$p]))
if (require(sandwich)) {
ism <- ism_vcov(X,vcov.func=vcovHC)
wald.stats <- ism$mu[1:ism$p] / sqrt(diag(ism$Ohat[1:ism$p,1:ism$p]))
}
# add some autocorrelation to X
Xf <- filter(X,c(0.2),"recursive")
colnames(Xf) <- colnames(X)
ism <- ism_vcov(Xf)
wald.stats <- ism$mu[1:ism$p] / sqrt(diag(ism$Ohat[1:ism$p,1:ism$p]))
if (require(sandwich)) {
ism <- ism_vcov(Xf,vcov.func=vcovHAC)
wald.stats <- ism$mu[1:ism$p] / sqrt(diag(ism$Ohat[1:ism$p,1:ism$p]))
}