2010-12-11 23 views
5

दो तरफा "चलती औसत" कैसे प्राप्त करें जो कि एक ऐसा कार्य है जो वेक्टर के दाएं और बाएं से औसत एन संख्या देता है और उन्हें केंद्र मूल्य से उनकी दूरी के अनुसार भार देता है?दो तरफा चलती औसत?

मैंने टीटीआर का उपयोग करने की कोशिश की लेकिन इसके चलती औसत केवल बाएं से दाएं काम करती हैं और बाएं मूल्यों को NA के रूप में सेट करती हैं। तो मैं चिकनी करने के लिए इनपुट के रूप में उस चिकना वेक्टर का उपयोग नहीं कर सकता। स्पिन

उत्तर

8

चिड़ियाघर पैकेज rollmean में और rollapply तर्क है कि कई रूपों की अनुमति देने के लिए है।

library(zoo) 
x <- seq(10)^2 

# no NAs at end 
rollmean(x, 3) 

# NAs at ends 
rollmean(x, 3, na.pad = TRUE) 

# weighted mean 
rollapply(zoo(x), 3, function(x) c(1, 2, 1) %*% x/4) 

# at ends take means of less than 3 points - needs devel version 
# partial= is in development and at this point must use na.rm = TRUE to use partial 
source("http://r-forge.r-project.org/scm/viewvc.php/*checkout*/pkg/zoo/R/rollapply.R?revision=802&root=zoo") 
rollapply(zoo(x), 3, mean, partial = TRUE, na.rm = TRUE) 

संपादित करें:

ध्यान दें कि इस के बाद लिखा गया था चिड़ियाघर के विकास के संस्करण लिख partial = TRUE एक नियम लिखते हैं = "आंशिक" या rule = 3 के इतने बदल गया था कि बजाय। समस्या यह थी कि विकास के संस्करण में नए अंत नियम जोड़े गए थे (अब 3 और 4 वें रिलीज होने से पहले जोड़े जाएंगे) प्रत्येक उपयोगकर्ता को इंटरफ़ेस के लिए एक अलग तर्क के लिए अलग तर्क है। इसके अलावा rule आर के मूल में approx के साथ अधिक संगत है। वास्तव में rule=1 और rule=2 का अर्थ rollapply और approx (आर के मूल से) में समान स्थिरता और उपयोग में आसानी के लिए समान अर्थ होगा। नीचे दिए गए उदाहरण में mean के आसपास कोष्ठक वर्तमान में rollmean पर कॉल करने से रोकने के लिए विकास संस्करण में आवश्यक हैं, जहां rule="partial" अभी तक कार्यान्वित नहीं किया गया है, लेकिन इसे करने की आवश्यकता को आधिकारिक रूप से जारी किए जाने तक समाप्त कर दिया जाएगा।

source("http://r-forge.r-project.org/scm/viewvc.php/*checkout*/pkg/zoo/R/rollapply.R?revision=815&root=zoo") 
rollapply(zoo(x), 3, (mean), rule = "partial") 
+0

लेकिन रोलमेन का उत्पादन हमेशा इनपुट से एक तत्व छोटा क्यों होता है? – rsk82

2

आप kernel को kernapply के साथ एक साथ देख सकते हैं (पहले पृष्ठ के अंत में कुछ उदाहरण हैं)। filter() समारोह में

5

देखो, और विशेष रूप sides तर्क:

filter     package:stats    R Documentation 

Linear Filtering on a Time Series 

Description: 

    Applies linear filtering to a univariate time series or to each 
    series separately of a multivariate time series. 

Usage: 

    filter(x, filter, method = c("convolution", "recursive"), 
      sides = 2, circular = FALSE, init) 

Arguments: 
[...] 
    sides: for convolution filters only. If ‘sides=1’ the filter 
      coefficients are for past values only; if ‘sides=2’ they are 
      centred around lag 0. In this case the length of the filter 
      should be odd, but if it is even, more of the filter is 
      forward in time than backward. 
संबंधित मुद्दे