2017-02-13 76 views
-1

我有以下結構式:其中b爲固定值(總和的上限):如何做一個函數的求和與函數內範圍值的給定範圍

\sum_{a=3}^{b=5}(a/b)cov{(k(t),k(t-a))}

K( t)是從給定的系列K和K在t的值(TA)是在滯後值:

k<- rnorm(100, 1, .25) 

我嘗試:

(3/5)*cov(k,lag(k,k=3)) + (4/5)*cov(k,lag(k,k=4)) + (5/5)*cov(k,lag(k,k=5)) 

答:0.08400983

我需要通過各種值的總和,評估高達20舉例說明:

b= 5:(3/5)*cov(k,lag(k,k=3)) + (4/5)*cov(k,lag(k,k=4)) + (5/5)*cov(k,lag(k,k=5)) 
b = 6: (3/6)*cov(k,lag(k,k=3)) + (4/6)*cov(k,lag(k,k=4)) + (5/6)*cov(k,lag(k,k=5)) +(6/6)*cov(k,lag(k,k=6)) 
b = 7: (3/7)*cov(k,lag(k,k=3)) + (4/7)*cov(k,lag(k,k=4)) + (5/7)*cov(k,lag(k,k=5)) +(6/7)*cov(k,lag(k,k=6)) + (7/7)*cov(k,lag(k,k=7)) 

我很困惑如何在給定的時間間隔總結這一點。請幫我發展R.由於該功能

+0

請閱讀此http://stackoverflow.com/help/how-to-ask ..向我們展示您在尋求幫助之前所做的事情。 – timat

+2

你至少可以解釋這個公式..因爲即使從數學背景也不清楚..總和爲a = 3直到b = 5?應該有更多的信息 – timat

+0

@timat善意審查我的問題,讓我知道現在清楚了嗎? – runjumpfly

回答

2

我會做這樣的事情:

foo = function(k, start = 3, stop = 5) { 
    result = 0 
    for (i in start:stop) { 
     result = result + i/stop * cov(k, stats::lag(k, k = i)) 
    } 
    return(result) 
} 

測試,它的工作原理:

k = rnorm(100) 
foo(k) 

現在迭代的stop不同的值。我在這裏使用sapply而不是for循環,因爲它更像R一樣。

stops = 5:20 
res = cbind(stops, sapply(stops, function(b) foo(k, start = 3, stop = b))) 
res 
#  stops   
# [1,]  5 2.240816 
# [2,]  6 2.801020 
# [3,]  7 3.334547 
# [4,]  8 3.851402 
# [5,]  9 4.357142 
# [6,] 10 4.855101 
# [7,] 11 5.347401 
# [8,] 12 5.835458 
# [9,] 13 6.320249 
# [10,] 14 6.802476 
# [11,] 15 7.282651 
# [12,] 16 7.761159 
# [13,] 17 8.238293 
# [14,] 18 8.714283 
# [15,] 19 9.189310 
# [16,] 20 9.663518 
+0

非常感謝。 – runjumpfly