2014-09-20 4 views
1

Первая часть мне нужно иметь R код примерно:Moving Average с помощью R код

Написать функцию R, которая делает следующее: Учитывая последовательность Xn = (x1, x2, ..., хп) наблюдений N , функция возвращает вектор скользящих средних, где вычисляется каждое среднее значение с k последовательными наблюдениями. Назовите функцию ma, а ее аргументы - вектором xN и k .

То, что я до сих пор:

x <-vector(length=n) 

ma <- function(x,k){ 
x0 <- x[1:(length(x)-k)] 
x1 <- x[(1+k):length(x)] 
cor(x0, x1) 
} 

Я уверен, что я сделал ошибки ...

+0

Я интересно, почему вы используете корреляцию, когда ваше домашнее задание говорит, чтобы вычислить движущийся ** средний ** –

+0

@RichardScriven Спасибо. – Keris

ответ

3

Есть множество способов расчета скользящих средних.

в базовом г, это может работать

filter(x, rep(1/2,2)) #this calculates moving average of 2 numbers in a sequence 
filter(x, rep(1/3,3)) #this calculates moving average of 3 numbers in a sequence 

для к последовательным наблюдениям

filter(x, rep(1/k,k)) 

например,

x <- c(3,5,7,3,4,2,6,4,7,2,1,9, 1, 10, 1,12) 
filter(x, rep(1/2,2)) 
# [1] 4.0 6.0 5.0 3.5 3.0 4.0 5.0 5.5 4.5 1.5 5.0 5.0 5.5 5.5 6.5 NA 

Вы также должны посмотреть следующие пакеты: zoo и TTR пакеты больше вариантов

Подобно тому, как быстро, например, функция runMean в TTR супер просто

runMean(x,2) #gives rolling mean of every 2 consecutive observations 
runMean(x,k) #gives rolling mean of every k consecutive observations 
+0

Я не изучил фильтр, зоопарк или рулетку, поэтому, возможно, я должен избегать их использования. – Keris

+0

@ Keris Итак, вы просто хотите, чтобы ваше домашнее задание было исправлено? –

+0

@RichardScriven Нет. Я говорю, что я хочу знать, где я ошибся. Я не просил вас исправить мое задание hw. – Keris