मैं दैनिक डेटा आवृत्ति में मासिक डेटा को अलग करने के लिए `tempdisagg` पैकेज से` td` कमांड का उपयोग कैसे कर सकता हूं?


9

मेरे पास एक मासिक आवृत्ति डेटा है जिसे मैं एक दैनिक आवृत्ति डेटा में अलग करने की कोशिश कर रहा हूं। इसलिए मैं नीचे दिए गए कोड का उपयोग करके R tdसे tempdisaggपैकेज में कमांड का उपयोग करता हूं :

 dat=ts(data[,2])
 result=td(dat~1, conversion = "average", to = "day", method = "chow-lin-maxlog")

तब मुझे निम्न त्रुटि संदेश मिलता है:

 Error in td(dat ~ 1, conversion = "average", to = "day", method = "chow-lin-maxlog") : 'to' argument: unknown character string

मेरे द्वारा उपयोग किया जाने वाला डेटा datइस प्रकार है:

यहां छवि विवरण दर्ज करें

 > dput(head(dat))
 c(82.47703009, 84.63094431, 70.00659987, 78.81135651, 74.749746,82.95638213)

इसलिए यद्यपि यह डेटा datमासिक आवृत्ति में है, फिर भी प्रारंभ और अंत इसे प्रतिबिंबित नहीं करते हैं। वास्तव में, प्रारंभ तिथि 1/1997 है और अंतिम तिथि 9/2019 है।

क्या मुझे इस मासिक डेटा datको दैनिक आवृत्ति डेटा में अलग करने में मदद मिल सकती है ?


1
एरिक, क्या आप प्रयोग करने योग्य प्रारूप में डेटा प्रदान कर सकते हैं? कृपया कोड / डेटा / त्रुटियों की एक छवि पोस्ट न करें: इसे कॉपी या सर्च (SEO) नहीं किया जा सकता है, यह स्क्रीन-रीडर्स को तोड़ देता है, और यह कुछ मोबाइल उपकरणों पर अच्छी तरह से फिट नहीं हो सकता है। Ref: meta.stackoverflow.com/a/285557/3358272 (और xkcd.com/2116 )। कृपया सीधे डेटा (जैसे, dput(head(x))या data.frame(...)) शामिल करें। धन्यवाद!
r2evans

मैंने डपट (सिर (x)) चीज़ को जोड़ा। क्या अब यह ठीक है?
एरिक

अजीब है कि। अगर मैं करता हूं dput(ts(head(1:50))), तो मुझे मिलता है structure(1:6, .Tsp = c(1, 6, 1), class = "ts")। आपकी छवि बताती है कि आपकी datसमय-श्रृंखला है, लेकिन आपकी c(...)नहीं है। क्या वे दोनों datएक ही हैं?
r2evans

हाँ वो दो डाट एक ही हैं। डेटा और डेटा अलग हैं।
एरिक

1
जब मैं देखता हूं tempdisagg.pdf, तो मैं "daily"कहीं भी नहीं मिल सकता, और to=कहता है कि यह "हाई-फ्रिक्वेंसी डेस्टिनेशन फ्रिक्वेंसी को कैरेक्टर स्ट्रिंग (" त्रैमासिक "या" मासिक ") या स्केलर के रूप में (उदाहरण 2, 4, 7, 12) का समर्थन करता है । यह कहाँ सुझाव दिया गया है कि to="daily"समर्थित है? क्या आप कोशिश कर सकते हैं to=1? (मैं वास्तव में इससे ज्यादा मदद नहीं कर सकता। मुझे अच्छी तरह से पैकेज का पता नहीं है, मुझे लगा कि मैं
उदारतापूर्वक

जवाबों:


4

ऐसा लगता है कि टेंपडिसैग पैकेज मासिक से दैनिक असहमति के लिए अनुमति नहीं देता है। से td()तर्क 'को' मदद फ़ाइल:

चरित्र स्ट्रिंग ("त्रैमासिक" या "मासिक") या एक अदिश (उदाहरण 2, 4, 7, 12) के रूप में उच्च-आवृत्ति गंतव्य आवृत्ति। यदि इनपुट श्रृंखला ts ऑब्जेक्ट हैं, तो कोई संकेतक नहीं दिए जाने पर तर्क आवश्यक है। यदि इनपुट श्रृंखला वैक्टर है, तो आवृत्ति अनुपात का संकेत देने वाला एक स्केलर होना चाहिए।

आपका त्रुटि संदेश "'टू' तर्क: अज्ञात चरित्र स्ट्रिंग" है क्योंकि to =तर्क केवल 'त्रैमासिक' या 'मासिक' को स्ट्रिंग के रूप में स्वीकार करता है।

प्रतिदिन स्टैकटेक्चेज पर मासिक डेटा को अलग करने के बारे में कुछ चर्चा है: /stats/258810/disaggregate-monthly-forecasts-into-daily-data

कुछ खोज के बाद, ऐसा लगता है कि कोई भी लगातार दैनिक डेटा के लिए अलग-अलग मासिक का उपयोग नहीं करता है। tempdisaggपैकेज जो सबसे अधिक दूसरों संभव हो पाया है करने में सक्षम हो रहा है - वार्षिक त्रैमासिक या मासिक करने के लिए, और समय अवधियों कि संगत भी गुणकों हैं।

एरिक, मैंने नीचे एक स्क्रिप्ट जोड़ी है जो आपको यह समझने की कोशिश करनी चाहिए कि आप क्या कर रहे हैं, जैसा कि मैं समझता हूं।

यहां हम दैनिक मूल्य -> ​​मासिक मूल्य -> ​​मासिक रिटर्न -> औसत दैनिक रिटर्न से स्थानांतरित करने के लिए वास्तविक मूल्य निर्धारण डेटा का उपयोग करते हैं।

library(quantmod)
library(xts)
library(zoo)
library(tidyverse)
library(lubridate)

# Get price data to use as an example
getSymbols('MSFT')

#This data has more information than we want, remove unwanted columns:
msft <- Ad(MSFT) 

#Add new column that acts as an 'indexed price' rather than 
# actual price data.  This is to show that calculated returns
# don't depend on real prices, data indexed to a value is fine.
msft$indexed <- scale(msft$MSFT.Adjusted, center = FALSE)

#split into two datasets  
msft2 <- msft$indexed
msft$indexed <- NULL


#msft contains only closing data, msft2 only contains scaled data (not actual prices)
#  move from daily data to monthly, to replicate the question's situation.
a <- monthlyReturn(msft)
b <- monthlyReturn(msft2)

#prove returns based on rescaled(indexed) data and price data is the same:
all.equal(a,b)

# subset to a single year
a <- a['2019']
b <- b['2019']

#add column with days in each month
a$dim <- days_in_month(a) 
a$day_avg <- a$monthly.returns / a$dim  ## <- This must've been left out

day_avgs <- data.frame(day_avg = rep(a$day_avg, a$dim))


# daily averages timesereis from monthly returns.
z <- zoo(day_avgs$day_avg, 
         seq(from = as.Date("2019-01-01"), 
             to = as.Date("2019-12-31"), 
             by = 1)) %>%
  as.xts()

#chart showing they are the same:
PerformanceAnalytics::charts.PerformanceSummary(cbind(a$monthly.returns, z))

यहां तीन चार्ट दिखाए गए हैं। केवल मासिक रिटर्न, 2. मासिक रिटर्न से दैनिक औसत, 3. दोनों एक साथ। जैसा कि वे समान हैं, तीसरी छवि में ओवरप्लोटिंग केवल एक दिखाता है।

मासिक प्रतिफल

मासिक रिटर्न से दैनिक औसत रिटर्न

मासिक और दैनिक औसत एक साथ साजिश रची


मेरे मामले में, मासिक आंकड़ा वह औसत है जो आपके प्रश्न के बाद का योग नहीं है। उदाहरण के लिए, मेरा डेटा जनवरी के लिए औसतन 4% दिखाता है। यदि मैं एक दैनिक आंकड़े में बदलने की कोशिश कर रहा हूं, तो मैं वर्तमान में 1 जनवरी और इतने पर सीधे 4% का उपयोग करने के बारे में सोच रहा था। लेकिन यकीन नहीं है कि क्या ऐसा करना अभी भी ठीक है।
एरिक

1
क्या मैं पूछ सकता हूं कि क्या आपके पास इस मामले पर कोई विचार है (जैसा कि मेरा पोस्ट किया गया सवाल है) कृपया?
एरिक

यह उस डेटा से स्पष्ट नहीं है जिसे आपने पोस्ट किया है कि आपके पास दरें हैं, यह कीमतों की तरह दिखता है। आप एक टिप्पणी में उल्लेख करते हैं कि आपके पास जनवरी के लिए औसत दर .04 है। यदि आप मासिक औसत दर से जा रहे हैं -> दैनिक औसत दर, आम तौर पर स्वीकृत सिद्धांत मासिक दर / 30 है (मुझे लगता है)। .04 (4%) के लिए आपने जनवरी में दैनिक दर .04 / 30 या ~ .001315 का उल्लेख किया है। यदि आप मेरे लिए प्रश्न स्पष्ट कर सकते हैं, तो इससे मदद मिल सकती है। क्या आपके पास मूल्य डेटा या दर डेटा है? और क्या परिणाम है जिसकी आप अपेक्षा कर रहे हैं? किसी भी तरह से, आईडी नहीं लगता है जैसे tempdisagg समाधान है।
22

1
मेरे द्वारा पोस्ट किया गया डेटा उदाहरण के लिए 100 के बेंचमार्क के साथ एक मासिक सूचकांक है। क्योंकि यह एक इंडेक्स है, इसमें कोई जोड़ नहीं है।
एरिक

ठीक है। यदि आप प्रतिशत डेटा (रिटर्न) में रुचि रखते हैं और एक नियमित समय श्रृंखला में मूल्य डेटा है, तो आप (मासिक) रिटर्न का उपयोग quantmod::monthlyReturnया PerformanceAnalytics::Return.calculateप्राप्त कर सकते हैं । वहां से यदि आपको दैनिक रिटर्न मानने की आवश्यकता है, तो आप उपरोक्त (टिप्पणी) विधि का उपयोग कर सकते हैं।
19
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.