いくつかのコードをスピードアップするのを手伝ってくれる人:
n = seq_len(ncol(mat)) # seq 1 to ncol(mat)
sym.pr<-outer(n,n,Vectorize(function(a,b) {
return(adf.test(LinReg(mat[,c(a,b)]),k=0,alternative="stationary")$p.value)
}))
観測とオブジェクトmat
のNxM
行列はどこにありますか。たとえば、次のとおりです。N
M
Obj1 Obj2 Obj3
1 . . .
2 . . .
3 . . .
LinReg
と定義されている:
# Performs linear regression via OLS
LinReg=function(vals) {
# regression analysis
# force intercept c at y=0
regline<-lm(vals[,1]~as.matrix(vals[,2:ncol(vals)])+0)
# return spread (residuals)
return(as.matrix(regline$residuals))
}
基本的に、のオブジェクト (つまりObj1, Obj2
と)のすべての組み合わせに対して回帰分析 (OLS) を実行し、パッケージの関数を使用して. 最終結果は、すべての対称行列です(ただし、実際には 100% 対称ではありません。詳細については、こちらを参照してください)。それでも十分です。Obj2,Obj3
Obj1, Obj3
mat
adf.test
tseries
p-value
sym.pr
p-values
上記のコードでは、600x300
マトリックス (600 個の観測と 300 個のオブジェクト) で、約 15 分かかります。
対称行列の上三角のみを計算することを考えましたが、どうやってそれを行うのかわかりません。
何か案は?
ありがとう。