0
我在修復PCA值時創建了這個函數。該函數的問題在於它與xts時間序列對象不兼容。避免循環遍歷每行和每列
amend <- function(result) {
result.m <- as.matrix(result)
n <- dim(result.m)[1]
delta <- apply(abs(result.m[-1,] - result.m[-n,]), 1, sum)
delta.1 <- apply(abs(result.m[-1,] + result.m[-n,]), 1, sum)
signs <- c(1, cumprod(rep(-1, n-1)^(delta.1 <= delta)))
zoo(result * signs)
}
的問題是,將所述函數具有多個列和行的XTS對象上不會解決問題。有沒有一種適用於xts對象矩陣的優雅方法?
我現在的解決方案給出了一個單列與多行是循環逐行...這是緩慢和乏味。想象一下,不得不逐列操作。
感謝,
下面是一些代碼來獲得一個開始:
rm(list=ls())
require(RCurl)
sit = getURLContent('https://github.com/systematicinvestor/SIT/raw/master/sit.gz', binary=TRUE, followlocation = TRUE, ssl.verifypeer = FALSE)
con = gzcon(rawConnection(sit, 'rb'))
source(con)
close(con)
load.packages('quantmod')
data <- new.env()
tickers<-spl("VTI,IEF,VNQ,TLT")
getSymbols(tickers, src = 'yahoo', from = '1980-01-01', env = data, auto.assign = T)
for(i in ls(data)) data[[i]] = adjustOHLC(data[[i]], use.Adjusted=T)
bt.prep(data, align='remove.na', dates='1990::2013')
prices<-data$prices[,-10] #don't include cash
retmat<-na.omit(prices/mlag(prices) - 1)
rollapply(retmat, 500, function(x) summary(princomp(x))$loadings[, 1], by.column = FALSE, align = "right") -> princomproll
require(lattice)
xyplot(amend(pruncomproll))
密謀「princomproll」將讓你心驚肉跳負荷......
很抱歉的模糊性,我想解決我的PCA時間序列的負荷,這是非常緊張。這個函數的問題在於它不接受一個xts對象,如果我要手動循環它,它就會非常低效。在堆棧溢出頁面中,編寫這個函數的編碼人員提供了一個完整的示例。我不想複製整個答案。我試圖循環,但是當我的xts對象有很多列時,這會很慢。 – user1234440