Learn R Programming

SharpeR (version 1.3.0)

ism_vcov: 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 \(n \times p\) matrix of observed returns.

vcov.func

a function which takes an object of class lm, and computes a variance-covariance matrix. If equal to the string "normal", we assume multivariate normal returns.

fit.intercept

a boolean controlling whether we add a column of ones to the data, or fit the raw uncentered second moment.

Value

a list containing the following components:

mu

a \(q = p(p+3)/2\) vector of the negative Markowitz portfolio, then the vech'd precision matrix of the sample data

Ohat

the \(q \times q\) estimated variance covariance matrix.

n

the number of rows in X.

p

the number of assets.

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.

References

Pav, S. E. "Asymptotic Distribution of the Markowitz Portfolio." 2013 https://arxiv.org/abs/1312.0557

See Also

sm_vcov, sr_vcov

Examples

Run this code
# NOT RUN {
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]))
# }
# NOT RUN {
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]))
}
# }
# NOT RUN {
# 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]))
# }
# NOT RUN {
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]))
}
# }
# NOT RUN {
# }

Run the code above in your browser using DataLab