المبالغ التراكمية والمتوسطات المتحركة ومكافئات SQL "التجميع حسب" في R

StackOverflow https://stackoverflow.com/questions/1169376

سؤال

ما هي الطريقة الأكثر فعالية لإنشاء متوسط ​​متحرك أو مجموع متجدد في R؟كيف تقوم بوظيفة التدحرج مع "التجميع حسب"؟

هل كانت مفيدة؟

المحلول

في حين أن حديقة الحيوان رائعة، إلا أن هناك أحيانًا طرقًا أبسط.إذا كانت بياناتك تتصرف بشكل جيد، وكانت متباعدة بشكل متساوٍ، فإن وظيفة embed() تتيح لك بشكل فعال إنشاء إصدارات متعددة متأخرة من سلسلة زمنية.إذا نظرت داخل حزمة VARS بحثًا عن الانحدار التلقائي المتجه، سترى أن مؤلف الحزمة يختار هذا المسار.

على سبيل المثال، لحساب المتوسط ​​​​المتحرك لـ 3 فترات لـ x، حيث x = (1 -> 20)^2:

> x <- (1:20)^2
> embed (x, 3)
      [,1] [,2] [,3]
 [1,]    9    4    1
 [2,]   16    9    4
 [3,]   25   16    9
 [4,]   36   25   16
 [5,]   49   36   25
 [6,]   64   49   36
 [7,]   81   64   49
 [8,]  100   81   64
 [9,]  121  100   81
[10,]  144  121  100
[11,]  169  144  121
[12,]  196  169  144
[13,]  225  196  169
[14,]  256  225  196
[15,]  289  256  225
[16,]  324  289  256
[17,]  361  324  289
[18,]  400  361  324
> apply (embed (x, 3), 1, mean)
 [1]   4.666667   9.666667  16.666667  25.666667  36.666667  49.666667
 [7]  64.666667  81.666667 100.666667 121.666667 144.666667 169.666667
[13] 196.666667 225.666667 256.666667 289.666667 324.666667 361.666667

نصائح أخرى

لقد قمت بخدش إجابة جيدة من Achim Zeileis في قائمة البحث.وهنا ما قاله:

library(zoo)
## create data

x <- rnorm(365)
## transform to regular zoo series with "Date" index

x <- zooreg(x, start = as.Date("2004-01-01")) plot(x)

## add rolling/running/moving average with window size 7 

lines(rollmean(x, 7), col = 2, lwd = 2)

## if you don't want the rolling mean but rather a weekly ## time series of means you can do
nextfri <- function(x) 7 * ceiling(as.numeric(x - 1)/7) + as.Date(1) xw <- aggregate(x, nextfri, mean)

## nextfri is a function which computes for a certain "Date" ## the next friday. xw is then the weekly series. 

lines(xw, col = 4)

وتابع أخيم قائلاً:

لاحظ أن الفرق بين هو المتوسط المتداول والسلاسل المجمعة بسبب محاذاة مختلفة.هذا يمكن تغييرها عن طريق تغيير "محاذاة" حجة في rollmean() أو الnextfri() دالة في المجموع دعا.

كل هذا جاء من أخيم، وليس مني:http://tolstoy.newcastle.edu.au/R/help/05/06/6785.html

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top