r - 将函数应用于时间序列

标签 r function time-series

嘿,我正在尝试将两个不同的函数应用于时间序列。第一个函数说明问题,第二个函数使用 optim 来解决它。

我已经尝试将这两个函数合二为一,以将这个单一函数应用于时间序列。 现在最大的问题是我无法返回计算值。 R 告诉我:* Error in return(V_A, Vola_A, DD, PD) : 不允许多参数返回 *

我想删除行 return(V_A, Vola_A, DD, PD) 但是如果我这样做,一个我不想要的值(我什至不知道它到底是什么)被打印出来。

这是我的代码:

data <- read.zoo(data)

cca <- function(V_LCL,Vola_LCL,Barriere,rf,HZ) {
  cca_min <- function(x) { 

    V_A <- x[1]
    Vola_A <- x[2]

    d1 <- (log(V_A/Barriere)+(rf+Vola_A^2/2)*HZ)/(Vola_A*sqrt(HZ))
    d2 <- d1-Vola_A*sqrt(HZ)

    G <- V_A*pnorm(d1)-Barriere*exp(-rf*HZ)*pnorm(d2)-V_LCL
    H <- pnorm(d1)*Vola_A*V_A-Vola_LCL*V_LCL

    return(G^2+H^2) #Summe der Residuen.

  }

  cca_fin <- optim(c(V_A = V_LCL, Vola_A = Vola_LCL),cca_min)
  V_A <- cca_fin$par[1]
  Vola_A <- cca_fin$par[2]

  d1 <- (log(V_A/Barriere)+(rf+Vola_A^2/2)*HZ)/(Vola_A*sqrt(HZ))
  d2 <- d1-Vola_A*sqrt(HZ)

  DD <- d2
  PD <- pnorm(-d2)


}

solution <- apply(data, MARGIN = 1, FUN=function(data) cca(V_LCL=data[["V_LCL"]], Vola_LCL=data[["Vola_LCL"]], Barriere=data[["Barriere"]], rf=data[["rf"]], HZ=1))

我希望得到一个包含 5 个不同列的数据框。日期和我之前提到的 4 个不同的返回。

自己“重建”问题:

#dput(head(data,10))
structure(c(75500410877, 77601206594, 79186519481, 80974008790, 
82537645824, 83864068176, 85170542638, 85919899689, 86511152529, 
86661504323, 0.079017183, 0.07855107, 0.077269899, 0.0712223, 
0.069432901, 0.069656866, 0.069367016, 0.070503068, 0.071102523, 
0.073219234, 9.2e+10, 87939600000, 84480400000, 80973200000, 
7.74e+10, 7.45e+10, 70886400000, 67668720000, 64408640000, 61210800000, 
0.028605, 0.030294737, 0.033022727, 0.033166667, 0.033309524, 
0.033631818, 0.03641, 0.038721739, 0.038452381, 0.041755), .Dim = c(10L, 
4L), .Dimnames = list(NULL, c("V_LCL", "Vola_LCL", "Barriere", 
"rf")), index = structure(c(12784, 12815, 12843, 12874, 12904, 
12935, 12965, 12996, 13027, 13057), class = "Date"), class = "zoo")

我必须更改/添加什么到我的代码中?

最佳答案

如果我们将returnlist(如果长度不同)或data.frame一起使用,它将返回

return(data.frame(V_A, Vola_A, DD, PD))

do.call(rbind, apply(data, MARGIN = 1, FUN=function(data)
     cca(V_LCL=data[["V_LCL"]], 
      Vola_LCL=data[["Vola_LCL"]], Barriere=data[["Barriere"]], 
      rf=data[["rf"]], HZ=1)))
#                 V_A     Vola_A          DD           PD
#2005-01-01 83050451962 0.68779085 -0.45110142 6.740418e-01
#2005-02-01 85361327254 0.64400360 -0.32116690 6.259580e-01
#2005-03-01 87105171426 0.60232917 -0.19554222 5.775158e-01
#2005-04-01 89071409714 0.54911211 -0.04056589 5.161790e-01
#2005-05-01 90791410452 0.48899014  0.14996570 4.403958e-01
#2005-06-01 92250475072 0.42087446  0.37724425 3.529960e-01
#2005-07-01 93687596965 0.06307322  4.96737159 3.393323e-07
#2005-08-01 94511889722 0.06415389  5.77931393 3.750293e-09
#2005-09-01 95162267830 0.06458672  6.60665865 1.965455e-11
#2005-10-01 95327654820 0.06656895  7.24865868 2.104595e-13

<

关于r - 将函数应用于时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57938849/

相关文章:

xml - 在 R 中解析具有重复元素名称的 XML

function - 如何在 Rust 中使用多参数字符串函数?

c++ - 创建飞镖游戏并出现两个错误 "too few argurments in function call"和 "game, identifier not found"

python - 检查我的时间序列索引数据是否有工作日的缺失值

MySQL 事件 : Remove time-series data without change

r - 对于这个混合效果模型,什么是最好的 "formula"

r - R 中另一个变量的平均变量

python - Pandas:重新采样数据帧以匹配不同数据帧的 DatetimeIndex

r - 如何在 dplyr::across 的 .names 参数中使用字符串操作函数

javascript - 创建一个 javascript 函数来根据单击的列表元素在列表元素之间切换类