1
這裏是我試圖在R.計算公式如何求和範圍並計算R中的一個序列?
到目前爲止,這是用一個簡單的例子
t <- seq(1, 2, 0.1)
expk <- function(k){exp(-2*pi*1i*t*k)}
set.seed(123)
dat <- ts(rnorm(100), start = c(1994,3), frequency = 12)
arfit <- ar(dat, order = 4, aic = FALSE) # represent \phi in the formula
tmp1 <- numeric(4)
for (i in seq_along(arfit$ar)){
ek <- expk(i)
arphi <- arfit$ar[i]
tmp1[i] <- ek * arphi
}
tmp2 <- sum(tmp1)
denom = abs(1-tmp2)^2
s2 <- t/denom
錯誤我的方法:警告消息: 在TMP1 [i] < - ek * arphi: 要替換的項目數不是替換長度的倍數
我試過了以避免使用for循環,並嘗試使用sapply,如解決方案question。
denom2 <- abs(1- sapply(seq_along(arfit$ar), function(x)sum(arfit$ar[x]*expf(x))))^2
但似乎不正確。問題是當它從另一個向量中獲取數值時(在指數k上),在這種情況下,t是分子中的數值。 任何解決方案?
對於測試數據集的任何建議,可能使用0和1來檢查此循環中的計算是否正確完成?
你確定你的意思'代表(4 NA)'?由於您無法重複「NA」次數,因此會引發錯誤。也許你想'rep(NA,4)'? – 2014-08-31 21:35:39
那就對了。錯字。 – Anusha 2014-08-31 21:36:51
你給出的代碼還有一些東西阻止它正常工作......例如,'tmp1'是一個向量,'exp1'也是。你不能用向量來替換一個向量的單個元素,所以'tmp1 [i] < - exp1 * arphi'會引發一個錯誤。您可能需要'rm(list = ls())'並確保您的代碼正常工作。 – 2014-08-31 21:47:49