簡體   English   中英

R腳本中的錯誤:數學函數的Abs(alpha)非數字參數中的錯誤

[英]Error in R-script: error in abs (alpha) non-numeric argument to mathematical function

我試圖從《用R進行金融風險建模和投資組合優化》一書中復制一些結果,但出現一個錯誤,似乎無法理解。 我在COPPosterior函數中收到以下錯誤:

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(MSTfit@fit[["beta"]])
S <- MSTfit@fit[["Omega"]]
skew <- c(MSTfit@fit[["alpha"]])
df <- MSTfit@fit[["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)

看一下MSTfit的結構:

STR(MSTfit)

您會看到,如果需要估計的Alpha值,則需要通過以下方式訪問它:

MSTfit@fit$estimated[['alpha']]

而不是

MSTfit@fit[['alpha']]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM