2015-03-31 321 views
1

我正在嘗試從「金融風險建模和投資組合優化與R」一書中重新獲得一些結果,並且我得到一個錯誤信息似乎沒有讓我頭腦發熱。 我得到的COPPosterior功能以下錯誤:在ABS(阿爾法)R腳本中的錯誤:數學函數的abs(alpha)非數字參數中的錯誤

錯誤:非數值參數數學函數

是任何人都能夠明白爲什麼我得到的錯誤?

的錯誤是從下面的腳本:

library(urca) 
library(vars) 
library(fMultivar) 

## Loading data set and converting to zoo 
data(EuStockMarkets) 
Assets <- as.zoo(EuStockMarkets) 
## Aggregating as month-end series 
AssetsM <- aggregate(Assets, as.yearmon, tail, 1) 
head(AssetsM) 
## Applying unit root tests for sub-sample 
AssetsMsub <- window(AssetsM, start = start(AssetsM), 
        end = "Jun 1996") 
## Levels 
ADF <- lapply(AssetsMsub, ur.df, type = "drift", 
       selectlags = "AIC") 
ERS <- lapply(AssetsMsub, ur.ers) 
## Differences 
DADF <- lapply(diff(AssetsMsub), ur.df, selectlags = "AIC") 
DERS <- lapply(diff(AssetsMsub), ur.ers) 
## VECM 
VEC <- ca.jo(AssetsMsub, ecdet = "none", spec = "transitory") 
summary(VEC) 

## Index of time stamps in back test (extending window) 
idx <- index(AssetsM)[-c(1:60)] 
ANames <- colnames(AssetsM) 
NAssets <- ncol(AssetsM) 
## Function for return expectations 
f1 <- function(x, ci, percent = TRUE){ 
    data <- window(AssetsM, start = start(AssetsM), end = x) 
    Lobs <- t(tail(data, 1)) 
    vec <- ca.jo(data, ecdet = "none", spec = "transitory") 
    m <- vec2var(vec, r = 1) 
    fcst <- predict(m, n.ahead = 1, ci = ci) 
    LU <- matrix(unlist(fcst$fcst), 
       ncol = 4, byrow = TRUE)[, c(2, 3)] 
    RE <- rep(0, NAssets) 
    PView <- LU[, 1] > Lobs 
    NView <- LU[, 2] < Lobs 
    RE[PView] <- (LU[PView, 1]/Lobs[PView, 1] - 1) 
    RE[NView] <- (LU[NView, 1]/Lobs[NView, 1] - 1) 
    names(RE) <- ANames 
    if(percent) RE <- RE * 100 
    return(RE)    
} 
ReturnEst <- lapply(idx, f1, ci = 0.5) 
qv <- zoo(matrix(unlist(ReturnEst), 
       ncol = NAssets, byrow = TRUE), idx) 
colnames(qv) <- ANames 
tail(qv) 


library(BLCOP) 
library(fPortfolio) 
## Computing returns and EW-benchmark returns 
R <- (AssetsM/lag(AssetsM, k = -1) -1.0) * 100 

## Prior distribution 
## Fitting of skewed Student's t distribution 
MSTfit <- mvFit(R, method = "st") 
mu <- c([email protected][["beta"]]) 
S <- [email protected][["Omega"]] 
skew <- c([email protected][["alpha"]]) 
df <- [email protected][["df"]] 

CopPrior <- mvdistribution("mvst", dim = NAssets, mu = mu, 
          Omega = S, alpha = skew, df = df) 
## Pick matrix and view distributions for last forecast 
RetEstCop <- ReturnEst[[27]] 
RetEstCop 
PCop <- matrix(0, ncol = NAssets, nrow = 3) 
colnames(PCop) <- ANames 
PCop[1, ANames[1]] <- 1 
PCop[2, ANames[2]] <- 1 
PCop[3, ANames[4]] <- 1 
Sds <- apply(R, 2, sd) 
RetViews <- list(distribution("norm", mean = RetEstCop[1], 
           sd = Sds[1]), 
       distribution("norm", mean = RetEstCop[2], 
           sd = Sds[2]), 
       distribution("norm", mean = RetEstCop[4], 
           sd = Sds[4]) 
) 
CopViews <- COPViews(pick = PCop, viewDist = RetViews, 
        confidences = rep(0.5, 3), 
        assetNames = ANames) 
## Simulation of posterior 
NumSim <- 10000 

CopPost <- COPPosterior(CopPrior, CopViews, 
         numSimulations = NumSim) 

print(CopPrior) 

print(CopViews) 

slotNames(CopPost) 

回答

0

看看MSTfit的結構:

STR(MSTfit)

你可以看到,如果你想估算阿爾法值,您需要通過以下方式訪問:

[email protected]$estimated[['alpha']] 

而不是

[email protected][['alpha']]