আমি কীভাবে দৈনিক ডেটা ফ্রিকোয়েন্সিতে মাসিক ডেটা আলাদা করতে `টেম্পডিসাগজি প্যাকেজ থেকে` td` কমান্ডটি ব্যবহার করতে পারি?


9

আমার একটি মাসিক ফ্রিকোয়েন্সি ডেটা রয়েছে যা আমি প্রতিদিনের ফ্রিকোয়েন্সি ডেটাতে আলাদা করার চেষ্টা করছি। সুতরাং আমি প্যাকেজটি 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 9

datদয়া করে দয়া করে এই মাসিক তথ্যটিকে দৈনিক ফ্রিকোয়েন্সি ডেটাতে আলাদা করতে সহায়তা পেতে পারেন ?


1
এরিক, আপনি কি ব্যবহারযোগ্য বিন্যাসে ডেটা সরবরাহ করতে পারেন? দয়া করে কোড / ডেটা / ত্রুটির কোনও চিত্র পোস্ট করবেন না: এটি অনুলিপি বা অনুসন্ধান করা যাবে না (এসইও), এটি স্ক্রিন-পাঠককে ভেঙে দেয় এবং এটি কিছু মোবাইল ডিভাইসে ভাল মানায় না। রেফারেন্স: meta.stackoverflow.com/a/285557/3358272 (এবং xkcd.com/2116 )। দয়া করে সরাসরি ডেটা (যেমন, dput(head(x))বা data.frame(...)) অন্তর্ভুক্ত করুন । ধন্যবাদ!
r2evans

আমি ডিপুট (মাথা (এক্স)) জিনিস যুক্ত করেছি। এখন কি এটা ঠিক আছে?
এরিক

অদ্ভুত জিনিস. আমি যদি করি dput(ts(head(1:50)))তবে আমি পাই structure(1:6, .Tsp = c(1, 6, 1), class = "ts")। আপনার চিত্রটি পরামর্শ দেয় যে আপনি datএকটি সময়-সিরিজ, তবে আপনার c(...)তা নয়। এই দুটি datকি একই রকম?
r2evans

হ্যাঁ two দুটি ড্যাট একই। ডেটা এবং ডাট আলাদা।
এরিক

1
আমি যখন দেখি tempdisagg.pdf, আমি "daily"কোথাও খুঁজে পাচ্ছি না এবং বলেছি to=এটি "উচ্চ-ফ্রিকোয়েন্সি গন্তব্য ফ্রিকোয়েন্সিটিকে একটি চরিত্রের স্ট্রিং (" ত্রৈমাসিক "বা" মাসিক ") হিসাবে বা স্কেলার হিসাবে (যেমন 2, 4, 7, 12) সমর্থন করে" । এটি কোথায় to="daily"সমর্থিত তা প্রস্তাবিত ? আপনি চেষ্টা করতে পারেন to=1? (আমি এর চেয়ে বেশি সাহায্য করতে পারি না the প্যাকেজটি আমি ভালভাবে জানি না, ভেবেছিলাম যে আমি
উদারভাবে

উত্তর:


4

দেখে মনে হচ্ছে টেম্পডিসাগ প্যাকেজটি দৈনিক ভিন্নতার জন্য মাসিক অনুমতি দেয় না। থেকে td()যুক্তি 'থেকে' সাহায্যের ফাইল:

অক্ষরের স্ট্রিং ("ত্রৈমাসিক" বা "মাসিক") বা স্কেলার হিসাবে (যেমন 2, 4, 7, 12) উচ্চ-ফ্রিকোয়েন্সি গন্তব্য ফ্রিকোয়েন্সি। যদি ইনপুট সিরিজটি টিএস অবজেক্ট হয় তবে কোনও সূচক না দেওয়া হলে যুক্তিটি প্রয়োজনীয়। যদি ইনপুট সিরিজটি ভেক্টর হয় তবে অবশ্যই ফ্রিকোয়েন্সি অনুপাত নির্দেশ করে এমন একটি স্কেলার হওয়া উচিত।

আপনার ত্রুটির বার্তা "" থেকে "আর্গুমেন্ট: অজানা অক্ষরের স্ট্রিং" কারণ 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))

এখানে তিনটি চার্ট প্রদর্শিত হচ্ছে 1. মাসিক রিটার্ন কেবল, 2. মাসিক রিটার্ন থেকে দৈনিক গড়, 3. উভয়ই একসাথে। যেমন তারা অভিন্ন, তৃতীয় চিত্রটিতে ওভারপ্লোটিং শুধুমাত্র একটি দেখায়।

মাসিক রিটার্ন

মাসিক রিটার্ন থেকে দৈনিক গড় রিটার্ন

মাসিক এবং দৈনিক গড় একসাথে চক্রান্ত করেছে


আমার ক্ষেত্রে, মাসিক চিত্রটি গড় হিসাবে আপনার প্রশ্ন পোস্টের অনুসন্ধানের হিসাবে যোগফল হয় না। উদাহরণস্বরূপ, আমার ডেটা জানুয়ারীর জন্য গড় 4% দেখায়। যদি আমি একটি দৈনিক চিত্রে রূপান্তরিত করার চেষ্টা করছি তবে আমি বর্তমানে এই 1% জানুয়ারীর জন্য সরাসরি 4% ব্যবহার করে ভাবছিলাম। তবে এটি এখনও এটি করা ঠিক আছে কিনা তা নিশ্চিত নন।
এরিক

1
আমি জিজ্ঞাসা করতে পারি যে এই ক্ষেত্রে আপনার কোনও ধারণা আছে (যেমন আমার পোস্ট করা প্রশ্ন জিজ্ঞাসা করে) দয়া করে?
এরিক

আপনি যে ডেটা পোস্ট করেছেন সেগুলি থেকে এটি পরিষ্কার নয় যে আপনার হার রয়েছে, দামের মতো মনে হচ্ছে। আপনি একটি মন্তব্যে উল্লেখ করেছেন যে আপনার কাছে জানুয়ারীর গড় হার .04 আছে। আপনি যদি কোনও মাসিক গড় হার -> দৈনিক গড় হার থেকে যান, তবে সাধারণত গৃহীত নীতিটি হ'ল মাসিক হার / 30 (আমার মনে হয়)। .04 (4%) এর জন্য আপনি জানুয়ারীতে একটি দৈনিক হার হতে হবে .04 / 30 বা ~ .001315। আপনি যদি আমার জন্য প্রশ্নটি পরিষ্কার করে দিতে পারেন তবে তা সাহায্য করতে পারে। আপনার কাছে দামের ডেটা বা রেট ডেটা আছে? এবং আপনি কি ফলাফল আশা করছেন? যেভাবেই হোক, আইডি টেম্পিডিসাগের মতো দেখায় না সমাধান।
mrhellmann

1
আমি পোস্ট করা ডেটা উদাহরণস্বরূপ 100 এর একটি মানদণ্ড সহ একটি মাসিক সূচক। কারণ এটি একটি সূচক, এটি যুক্ত হয় না।
এরিক

ঠিক আছে. যদি আপনি শতাংশের ডেটা (রিটার্ন) এ আগ্রহী হন এবং নিয়মিত সময় সিরিজে দামের ডেটা থাকে তবে আপনি ব্যবহার করতে পারেন quantmod::monthlyReturnবা PerformanceAnalytics::Return.calculate(মাসিক) রিটার্ন পেতে পারেন । সেখান থেকে আপনার যদি প্রতিদিনের রিটার্ন অনুমান করার প্রয়োজন হয় তবে আপনি উপরের (মন্তব্য) পদ্ধতিটি ব্যবহার করতে পারেন।
mrhellmann
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.