我需要计算两个价格之间回归的beta值:
在R中,有一个函数prcomp
来执行它。
之后,我如何提取测试版?
代码是
`library(quantmod)
# how to get closes
getCloses <- function(sym) {
ohlc <- getSymbols(sym, from="2009-01-01", to="2011-01-01",
auto.assign=FALSE, return.class="zoo")
Cl(ohlc)}
# how to import data (2 assets)
closes <- merge(IWM=getCloses("IWM"),
VXZ=getCloses("VXZ"), all=FALSE)
# function for hedging ratio
tlsHedgeRatio <- function(p, q) {
r <- princomp( ~ p + q+0)
r$loadings[1,1] / r$loadings[2,1]
}
# get the hedging ratio
with(closes, {
cat("TLS for VXZ vs. IWM =", tlsHedgeRatio(VXZ,IWM), "\n")
})`
在代码中显示如何使用拦截执行TLS回归。我试图在没有拦截的情况下执行相同的操作。
使用lm
功能时,添加+0
可以在不拦截的情况下执行回归,我如何使用prcomp
函数执行相同操作?
答案 0 :(得分:0)
如果R是包含数据的矩阵
pcaresult <- prcomp(R)
eigenVect <- pcaresult$rotation
eigenVal <- (pcaresult$sdev)^2
coeff1 = as.numeric(coeff$eigenvectors[,"PC2"][1])
coeff2 = -as.numeric(coeff$eigenvectors[,"PC2"][2])
ratio = coeff2/coeff1
您还可以检查功能?MethComp::Deming
(在包MethComp
中),它会产生类似的结果。