0

在我完成运行我的函数后,我一直得到 0 作为我的答案:

 niv_density <- function(returns, mu, delta, alpha, beta, t)
{
    t <- 1/t
    gamma <- sqrt(alpha^2 - beta^2)
    result <- rep(0, (1/t))
    for(i in 1:(1/t))
    {
        term3 <- exp(delta*gamma*t + beta*(returns[i] - mu*t))
        term1 <- alpha*delta*t/pi
        term2_1 <- besselY(alpha*sqrt(delta^2*t^2 + (returns[i] - mu*t)^2), 1)
        term2_2 <- sqrt(delta^2*t^2 + (returns[i] - mu*t)^2)
        term2 <- term2_1/term2_2
        result[i] <- (term1*term2*term3)
    }
}

niv_density(returns, 0, 2, 50, 0, 10)
result

执行最后一部分后,我得到一个 0 的向量。我认为我在全局与本地范围之间存在问题,但我不确定如何解决它。

dput(returns)
structure(c(-0.003859212, 0.011873365, -0.004826217, -0.004006846, 
-0.004527209, -0.005597606, -0.001446292, 0.004890173, 0.001260653, 
-0.005469839, 0.001715495, 0.00776223, -6.79514e-05, -0.002405413, 
-0.00344927, 0.013203733, 0.009007395, -0.002918161, -0.000682757, 
0.003600917, -0.001584568, 0.001778635, 0.003881849, -0.003228443, 
0.00809855, -0.003407655, 0.006570117, -0.001629285, -0.001479157, 
-0.000683758, 0.007489741, 0.007807378, 0.001399056, -0.000578823, 
-0.002437511, -0.000593349, -0.004020762, 0.004744014, -0.001815119, 
0.007757796, -0.002401808, -0.00225831, -0.005162853, -0.002256747, 
0.032891919, 0.005882631, -0.011822966, -0.005744899, -0.004359233, 
0.00405189, 0.017035644, 0.001079738, 0.001845759, -0.004758891, 
0.006067706, -0.006027932, -0.00224155, -0.010844493, 0, -0.003861616, 
-0.004698823, 0.000397524, 0.001840917, 0.013599978, -0.008376557, 
1.92494e-05, 0.010797502, -0.004105023, 0.003119424, -0.004797368, 
-0.001962367, 0.002663974, 0.008489008, 0.007827146, -0.000566674, 
-0.003404669, -0.000160508, -0.003953786, -0.000635631, 0.0023086, 
0.008931147, -0.002761431, 0.013046559, -0.009673618, 0.007572105, 
-0.011309217, 0.003777911, -0.004767721, -0.004096769, 0.003915212, 
-0.005571037, 0.008566323, -0.009063831, -0.011191246, -0.000639167, 
0.002834983, -0.009156367, 0.00189252, 0.007166451, -0.001788182, 
-0.002437146, 0.00226261, -0.010459432, -0.001511577, 0.00039628, 
-0.00349739, 0.009561965, 0.063504871, 0.003492974, 0.009233691, 
0.004795333, -0.003995969, -0.002552804, 6.81834e-05, 0.006134657, 
0.006713932, -0.006875273, -0.005108732, 0.006239377, 0.002293386, 
-0.01121192, -0.005666844, 0.000894577, -0.012511724, 0.00351622, 
-0.009671627, -0.004480382, 0.007385228, -0.009143379, 0.005467177, 
0.017094141, 0.005918621, 0.001514995, -0.001356959, 0.015656296, 
0.001101646, 0.001457523, 0.0051402, -0.005516804, 0.002832519, 
-0.002196811, -0.007752963, 0.009050809, 0.006380147, 0.001995102, 
0.002319077, -0.001788715, 0.000845096, -0.009821598, 0.012634302, 
-0.001457121, 0.000582262, -0.004083585, -0.004021717, -0.000571503, 
0.006159289, -0.010822168, -0.015789222, -0.000657867, 0.013935285, 
0.001312777, -0.001172312, 0.003031039, 0.002482838, -0.010634785, 
0.014015267, 0.005435065, -0.034817949, 0.005145224, -0.007217488, 
0.00458109, 0.012581199, 0.001853981, 0.002118571, -0.011151137, 
-0.007933775, 0.011336262, 0.018212375, 0.007815775, 0.006103632, 
-0.007270438, -0.001066825, 0.001892988, -0.009740379, 0.012057142, 
0.00024459, -0.003702988, 0.014628744, -0.001902607, -7.49322e-05, 
-0.005903797, -0.002481339, -0.004266069, 0.01150386, -0.019888508, 
0.007657512, -0.004649027, 0, 0.002523089, -0.00072238, -0.021153782, 
-0.007969763, 0.005775428, -0.010897333, 0.007468107, -0.009508927, 
0.000464995, -0.002430182, 0.010796022, 0.008898853, -0.013079549, 
0.027112561, -0.015413991, -0.007630787, 0.007033724, -0.017738864, 
-0.015961032, -0.015579591, -0.011802317, -0.002187586, 0.003065715, 
0.013389559, -0.000885034, -0.013701533, 0.001976838, 0.001041955, 
-0.003616062, 0.005344799, 0.007148373, -0.002877552, -0.007681476, 
0.021591165, 0.017966863, -0.058771073, -0.019551973, 0.005203616, 
0.002169669, 0.003884158, -0.022568915, 0.002769004, -0.007779571, 
0.018998803, -0.001212088, 0.002446011, 0.007740844, 0.012532807, 
0.006287039, 0.003958813, 0.01407559, 0.001064047, -0.00862106, 
-0.012296938, -0.013967015, 0.010524923, -0.010789529, 0.011953286, 
0.000738662, -0.016492003, -0.00257709, -0.015437029, 0.004315983, 
0.023337948, 0.008138125, 0.005972748, 0.005915635, 0.010493804, 
-0.011895336, -0.005245454, 0.007409717, 0.012596218, -0.005221382, 
-0.005462129, 0.008785043, 0.009134618, 0.015541224, 0.016072839, 
-0.003827797, 0.000403703, 0.03749696, -0.003386946, -0.008627298, 
-0.030790478, -0.003861794, -0.011426323, 0.001393173, 0.008541783, 
0.009361445, -0.023851831, 0.024814864, -0.019724128, 0.002621807, 
-0.017904622, -0.003584294, -0.019299804, -0.00234839, -0.002685042, 
0.002685042, 0.016590137, 0.001401377, -0.006120481, 0.006690448, 
-0.004740457, -0.005027981, 0.013204038, -0.002742491, 0.005110009, 
-0.006393429, 0.00464228, -0.00270551, -0.011552836, 0.003074876, 
0.005139878, 0.002032361, 0.007603533, 0.010491222, 0.000658875, 
0.003909991, 0.00236732, 0.019192366, -0.00361624, 0.005696264, 
-0.005852811, 0.014805765, 0.00313454, 0.006385073, -0.005475311, 
-0.009195918, 0.008472618, -0.000559148, -0.007272851, 0.003748203, 
0.001156269, 0.004328552, -0.006107929, -0.012121056, 0.002812434, 
-0.009577213, 0.005689626, -0.001941957, 0.006145673, -0.002275509, 
-0.006578825, -0.005345298, -0.000327811, 0.003751791, 0.005053343, 
0.005157952, -0.022100394, -0.007461083, 0.003576376, 0.00093598, 
0.006738706, 0.006976768, 0.001078282, -0.006256189, 0.003313743, 
-0.005955287, 0.011771523, 0.001644383, -0.003459295, 0.032863111, 
-0.007369908, -0.001099451, 0.004745151, 0.012094786, 0.001167328, 
-0.00404787, -0.004345022, -0.001121192, 0.004333763, -0.008483142, 
-0.001578184, -0.00046999, 0.005079249, -0.005970832, 0.005543307, 
0.006722626, 0, 0.001715197, 0.011776868, 0.013308783, -0.004160112, 
-0.000304697, 0.014924613, 0.007204855, -0.00509816, 0.007186504, 
0.002287253, -0.009948655, -0.001000861, -0.00431929, -0.00347645, 
0.005015994, -0.007540969, 0.00558486, -0.005661924, -0.006602168, 
-0.002824197, 0.001939661, 0.006563001, -0.009757559, -0.00978824, 
-0.001247868, 0.002622219, -0.009097288, -0.014394158, -0.00292424, 
0.002644891, -0.005572549, -0.003181826, 0.002676673, 0.007032888, 
0.002127581, 0.005281961, 0.016021024, 0.001232531, 0.005515082, 
0.000450254, 0.003568462, 0.006277841, -0.003823264, -0.032527132, 
0.021873831, -0.003231721, -0.000368515, -0.001397511, -0.010973353, 
-0.011563657, -0.010061858, 0.005714484, 0.007472816, 0.003407539, 
-0.000612977, -0.000800283, -0.001900635, -0.000865432, -0.003630001, 
0.00562073, 0.001858425, 0.010064273, -0.006584881, -0.001470899, 
0.005433816, -0.002510864, -0.001071656, -0.005130965, 2.35065e-05, 
0.003445676, 0.01374472, -0.001123534, 0.006067276, 0.004050843, 
-0.000773321, -0.003401186, 0.001908336, -0.003562041, -0.001180884, 
-0.003133416, 0.005819655, -0.002096198, -4.92007e-05, 0.002838133, 
-0.010010669, 0.00557654, -0.000122526, 0.022760252, -0.005618111, 
0.014434193, 0.001716112, 0.01567573, 0.001566116, -0.003071945, 
-0.018146189, -0.012123038, -0.007480614, 0.007735601, -0.00436506, 
0.003091618, 0.004704796, 0.001184206, 0.010066361, 0.005389096, 
-0.007021784, -0.004211278, -0.001740557, -0.00628043, 0.002434464, 
-0.000333944, 0.010815674, 0.016910153, 0, -0.01318228, -0.002858256, 
0.024721185, 0.001006412, -0.003651077, 0.009682259, -0.007093437, 
-0.002005597, 0.002424598, -0.015024047, 0.015051995, 0.004720944
), na.action = structure(504L, class = "omit"))
4

1 回答 1

4

您的版本不起作用,因为result它是函数体的本地版本,并且在您退出函数时它会丢失。我怀疑您result的全局环境中有另一个对象(零向量),这就是您尝试检查结果时总是得到的。

相反,通过在末尾result添加一条语句使您的函数显式返回:return

niv_density <- function(returns, mu, delta, alpha, beta, n) {
    t <- 1/n
    gamma <- sqrt(alpha^2 - beta^2)
    result <- rep(0, n)
    for(i in seq_len(n)) {
        term3   <- exp(delta*gamma*t + beta*(returns[i] - mu*t))
        term1   <- alpha*delta*t/pi
        term2_1 <- besselY(alpha*sqrt(delta^2*t^2 + (returns[i] - mu*t)^2), 1)
        term2_2 <- sqrt(delta^2*t^2 + (returns[i] - mu*t)^2)
        term2   <- term2_1/term2_2
        result[i] <- (term1*term2*term3)
    }
    return(result)
}

并且在调用函数时,将结果分配如下:

result <- niv_density(returns, 0, 2, 50, 0, 10)

(也许您应该避免调用变量result,我相信您可以从上下文中找到更具描述性的名称。)

于 2012-11-03T20:33:55.807 回答