2013-04-29 4 views
4

Я новичок в R и пытаюсь вычислить стандартное отклонение (sd) начальной загрузки и связанную с ним стандартную ошибку в 30 окнах сканирования. Приведенная ниже функция выполняет соответствующее окно качения, если я просто хочу sd. Но когда я добавляю функцию bootstrap с помощью загрузочного пакета, я получаю указанную ниже ошибку. Я понимаю, что я пытаюсь сохранить результаты начальной загрузки в вектор, который не соответствует размеру. Кто-нибудь имеет какие-либо советы о том, как хранить только загрузочный sd и связанный stderror для каждого окна в строках новой матрицы? Цель состоит в том, чтобы затем построить sd и соответствующие доверительные интервалы 95% для каждого окна по времени. Заранее благодарю за любую помощь.Как вычислить загруженные загрузочные значения и доверительные интервалы в R

> head(data.srs) 
    LOGFISH 
1 0.8274083 
2 1.0853433 
3 0.8049845 
4 0.8912097 
5 1.3514569 
6 0.8694499 


###Function to apply rolling window 

rollWin <- function(timeSeries, windowLength) 
{ 
    data<-timeSeries 
    nOut <- length(data[, 1]) - windowLength + 1 
    out <- numeric(nOut) 
    if (length(data[,1]) >= windowLength) 
    { 
    for (i in 1:nOut) 
     { 
     sd.fun <- function(data,d)sd(data[d], na.rm = TRUE) 
     out[i] <- boot(data[i:(i + windowLength - 1), ], sd.fun, R=1000) 
     } 
    } 
    return (list(result=out)) 
} 

###run rolling window function. ex. rollWin(data, windowlength) 
a.temp<-rollWin(data.srs,30) 


> warnings() 
Warning messages: 
1: In out[i] <- boot(data[i:(i + windowLength - 1), ], sd.fun, ... : 
    number of items to replace is not a multiple of replacement length 

ответ

1

Вы можете упростить его довольно много. Я не знаком с boot пакета, но мы можем свернуть функцию вдоль вектора с помощью функции rollapply довольно легко, и тогда мы можем сделать образцы бутстраповские с помощью replicate функции:

# Create some data, 12 items long 
r <- runif(12) 
# [1] 0.44997964 0.27425412 0.07327872 0.68054759 0.33577348 0.49239478 
# [7] 0.93421646 0.19633079 0.45144966 0.53673296 0.71813017 0.85270346 


require(zoo) 

# use rollapply to calculate function alonga moving window 
# width is the width of the window 
sds <- rollapply(r , width = 4 , by = 1 , sd) 
#[1] 0.19736258 0.26592331 0.16770025 0.12585750 0.13730946 0.08488467 
#[7] 0.16073722 0.22460430 0.22462168 


# Now we use replicate to repeatedly evaluate a bootstrap sampling method 
# 'n' is number of replications 
n <- 4 
replicate(n , rollapply(r , width = n , function(x) sd(x[ sample(length(x) , repl = TRUE) ]))) 



#   [,1]  [,2]  [,3]  [,4] 
# [1,] 0.17934073 0.1815371 0.11603320 0.2992379 
# [2,] 0.03551822 0.2862702 0.18492837 0.2526193 
# [3,] 0.09042535 0.2419768 0.13124738 0.1666012 
# [4,] 0.17238705 0.1410475 0.18136178 0.2457248 
# [5,] 0.32008385 0.1709326 0.32909368 0.2550859 
# [6,] 0.30832533 0.1480320 0.02363968 0.1275594 
# [7,] 0.23069951 0.1275594 0.25648052 0.3016909 
# [8,] 0.11235170 0.2493055 0.26089969 0.3012610 
# [9,] 0.16819174 0.2099518 0.18033502 0.0906986 

Каждый столбец представляет rollapply, который Загружает наблюдения в текущем окне перед применением sd.

+0

Благодарим за ответ. Если я не понимаю, похоже, что ваш метод отменяет все временные ряды, мне нужно выполнить повторную выборку в каждом движущемся окне. Поэтому, если первое окно содержит последние 30 наблюдений, функция бутстрапа применяется только к этому окну (эти 30 наблюдений). Затем сохраните средний загруженный sd и доверительные интервалы в строке новой матрицы. Затем окно скользит над одним наблюдением и повторяется до конца временного ряда. – Gladeslab

+0

@ Gladeslab ok - дайте мне несколько минут, чтобы исправить это. –

+0

@ Gladeslab проверить изменения. Это просто тонкое изменение в репликации. Приветствия. –