এসিএফ এবং পিএসিএফ সূত্র


18

সময়-সিরিজের ডেটা থেকে এসিএফ এবং পিএসিএফ প্লট করার জন্য একটি কোড তৈরি করতে চাই। ঠিক এই মিনিট্যাব (নীচে) থেকে উত্পন্ন প্লটটির মতো।

এসিএফ প্লটিং

পিএসিএফ প্লটিং

আমি সূত্রটি অনুসন্ধান করার চেষ্টা করেছি, তবে আমি এখনও এটি ভালভাবে বুঝতে পারি না। আপনি কি আমাকে সূত্রটি বলবেন এবং এটি কীভাবে ব্যবহার করবেন দয়া করে? উপরের ACF এবং PACF প্লটে অনুভূমিক লাল রেখাটি কী? সূত্র কী?

ধন্যবাদ,


1
@ javlacalle আপনার দেওয়া সূত্রটি কি সঠিক? এটা কাজের যদি না would ঠিক আছে? এটি কি নীচের মতো হওয়া উচিত? $$ \ rho (কে) = \ frac {\ frac {1} {nk} \ যোগ_ {t = কে + 1} ^ n (y_t - \ বার {y}) (y_ {tk} - \ বার {y} )} {\ srrt {rac frac {1} {n} \ Sum_ {t = 1} ^ n (y_t - \ বার {Y}) ^ 2} q স্ক্রিট {\ frac {1} k nk} \ যোগ_ {t = কে + 1} ^ n (y_ {tk} - \ বার {y}) ^ 2}} \ ,,n t = 1 ( y টি - ˉ y ) < 0
ρ(k)=1nkt=k+1n(yty¯)(ytky¯)1nt=1n(yty¯)1nkt=k+1n(ytky¯),
t=1n(yty¯)<0and/ort=k+1n(ytky¯)<0
সংঘর্ষ

আপনি ঠিক বলেছেন, ধন্যবাদ আমি এর আগে দেখিনি। আমি এটি স্থির করেছি।
javlacalle

উত্তর:


33

Autocorrelations

দুটি ভেরিয়েবলের মধ্যে পারস্পরিক সংজ্ঞায়িত করা হয়েছে:y1,y2

ρ=E[(y1μ1)(y2μ2)]σ1σ2=Cov(y1,y2)σ1σ2,

যেখানে ই প্রত্যাশা অপারেটর, এবং হ'ল যথাক্রমে এবং এবং তাদের স্ট্যান্ডার্ড বিচ্যুতি।μ1μ2y1y2σ1,σ2

একটি একক ভেরিয়েবলের প্রসঙ্গে, অর্থাত্ স্বয়ং- সংশোধন,y1 হ'ল মূল সিরিজ এবংএকটিসংস্করণ। উপরোক্ত সংজ্ঞা অনুসারে, অর্ডারএর নমুনাপর্যবেক্ষণ করা সিরিজ,সহ নিম্নোক্ত এক্সপ্রেশনটি গণনা করে পাওয়া যাবে:Y2=0,1,2,Yটিটি=1,2,,এন

ρ()=1এন-Σটি=+ +1এন(Yটি-Y¯)(Yটি--Y¯)1এনΣটি=1এন(Yটি-Y¯)21এন-Σটি=+ +1এন(Yটি--Y¯)2,

যেখানে the হ'ল ডেটার নমুনা গড়।Y¯

আংশিক স্বতঃসংশ্লিষ্ট

আংশিক স্বতঃসীমাবদ্ধতা উভয় ভেরিয়েবলের উপর প্রভাব ফেলে এমন অন্যান্য ভেরিয়েবল (গুলি) এর প্রভাব অপসারণের পরে একটি পরিবর্তনশীলের রৈখিক নির্ভরতা পরিমাপ করে। উদাহরণস্বরূপ, ক্রম ব্যবস্থা প্রভাব পড়ে না (রৈখিক নির্ভরতা) আংশিক autocorrelation উপর প্রভাব মুছে ফেলার পরে উভয়ই চালু এবং ।Yটি-2YটিYটি-1YটিYটি-2

প্রতিটি আংশিক স্বতঃসংশোধন ফর্মের একধরণের রেজিস্ট্রেশন হিসাবে পাওয়া যেতে পারে:

Y~টি=φ21Y~টি-1+ +φ22Y~টি-2+ +টি,

যেখানে মূল সিরিজের বিয়োগ নমুনা গড় করা হয়, । এর অনুমান আদেশের আংশিক স্বতঃসংশোধনের মান দেবে 2. অতিরিক্ত ল্যাগ সহ রিগ্রেশনকে প্রসারিত করে , শেষ পদের অনুমানটি অর্ডার এর আংশিক স্বতঃসংশোধন দেবে ।Y~টিYটি-Y¯φ22

নমুনা আংশিক autocorrelations গনা একটি বিকল্প উপায় প্রতিটি আদেশের জন্য নিম্নলিখিত পদ্ধতি সমাধানে হয় :

(ρ(0)ρ(1)ρ(k1)ρ(1)ρ(0)ρ(k2)ρ(k1)ρ(k2)ρ(0))(ϕk1ϕk2ϕkk)=(ρ(1)ρ(2)ρ(k)),

যেখানে নমুনা স্বতঃসংশ্লিষ্ট। নমুনা স্বতঃসিদ্ধকরণ এবং আংশিক স্বতঃসংশোধনের মধ্যে এই ম্যাপিংটি ডুর্বিন-লেভিনসন পুনরাবৃত্তি হিসাবে পরিচিত । এই পদ্ধতির চিত্রের জন্য প্রয়োগ করা তুলনামূলকভাবে সহজ। উদাহরণস্বরূপ, আর সফ্টওয়্যারটিতে, আমরা নিম্নরূপ অর্ডার 5 এর আংশিক স্বতঃসংশোধন পেতে পারি:ρ()

# sample data
x <- diff(AirPassengers)
# autocorrelations
sacf <- acf(x, lag.max = 10, plot = FALSE)$acf[,,1]
# solve the system of equations
res1 <- solve(toeplitz(sacf[1:5]), sacf[2:6])
res1
# [1]  0.29992688 -0.18784728 -0.08468517 -0.22463189  0.01008379
# benchmark result
res2 <- pacf(x, lag.max = 5, plot = FALSE)$acf[,,1]
res2
# [1]  0.30285526 -0.21344644 -0.16044680 -0.22163003  0.01008379
all.equal(res1[5], res2[5])
# [1] TRUE

আত্মবিশ্বাস ব্যান্ড

আত্মবিশ্বাস ব্যান্ডগুলি নমুনা মান হিসাবে গণনা করা যায় , যেখানে the কোয়ান্টাইল Ga গাউসীয় বিতরণে , যেমন 95% আত্মবিশ্বাস ব্যান্ডের জন্য 1.96।±z1α/2nz1α/21α/2

কখনও কখনও আদেশ বাড়ার সাথে সাথে বৃদ্ধি হওয়া আত্মবিশ্বাস ব্যান্ডগুলি ব্যবহার করা হয়। এই ক্ষেত্রে ব্যান্ডগুলি ।±z1α/21n(1+2i=1kρ(i)2)


1
(+1) দুটি আলাদা আত্মবিশ্বাস ব্যান্ড কেন?
Scortchi - পুনর্বহাল মনিকা

2
স্বাধীনতার জন্য পরীক্ষার সময় @ স্কোর্টচি কনস্ট্যান্ট ব্যান্ডগুলি ব্যবহার করা হয়, যখন বর্ধমান ব্যান্ডগুলি মাঝে মাঝে একটি এআরআইএমএ মডেল শনাক্ত করার জন্য ব্যবহৃত হয়।
javlacalle

1
আত্মবিশ্বাস ব্যান্ড গণনা করার দুটি পদ্ধতি এখানে আরও বিশদে বিশদভাবে ব্যাখ্যা করা হয়েছে
স্কর্চচি - মনিকা পুনরায় ইনস্টল করুন

নিখুঁত ব্যাখ্যা!
জান রোথগেল

1
@ জাভালাক্যাল, omin জন্য ডোনামিনেটরে মিস স্কোয়ারের অভিব্যক্তি কি? ρ()
ক্রিস্টোফ হ্যাঙ্ক

10

"আমি সময় সিরিজের ডেটা থেকে এসিএফ এবং পিএসিএফ প্লট করার জন্য একটি কোড তৈরি করতে চাই"।

যদিও ওপিটি কিছুটা অস্পষ্ট, লিনিয়ার বীজগণিতের মডেল গঠনের চেয়ে সম্ভবত এটি কোনও "রেসিপি" -স্টাইল কোডিং সূত্রের দিকে বেশি লক্ষ্যযুক্ত হতে পারে।


ACF বরং সহজবোধ্য: আমরা একটি সময় সিরিজ আছে, এবং মূলত একাধিক "কপি" করতে (ইন হিসাবে "কপি এবং পেস্ট করুন") এটি বোঝার প্রতিটি কপি পূর্বে কপি থেকে একটি এন্ট্রি পুষিয়ে হতে যাচ্ছে, কারণ প্রাথমিক ডেটাতে ডেটা পয়েন্ট থাকে, তবে পূর্ববর্তী সময় সিরিজের দৈর্ঘ্য (যা শেষ ডেটা পয়েন্ট বাদ দেয়) কেবল । সারি থাকাকালীন আমরা কার্যত যতগুলি অনুলিপি তৈরি করতে পারি। প্রতিটি অনুলিপিটি আমাদের সাথে অভিন্ন দৈর্ঘ্যের প্রয়োজন তা মনে রেখে মূল সাথে সম্পর্কিত হয় এবং এখানের শেষের দিকে, তাদের তুলনা করার জন্য আমাদের প্রাথমিক ডেটা সিরিজের লেজের প্রান্তটি ক্লিপিং চালিয়ে যেতে হবে। উদাহরণস্বরূপ, প্রাথমিক to এর সাথে সম্পর্কিত করতে আমাদের শেষ থেকে মুক্তি দিতে হবেটিটি-1টিগুলিটি-33মূল সময় সিরিজের ডেটা পয়েন্ট (প্রথম কালানুক্রমিকভাবে)।3

উদাহরণ:

আমরা একটি ট্রেন্ড লাইন, এবং শব্দ, এবং আর উত্পাদিত এসিএফ প্লট প্লট উপর চক্রাকারে সাইন প্যাটার্ন সুপারম্পোজ সঙ্গে একটি বার সিরিজ একত্রিত করব। ক্রিস্টোফ শেরবারের একটি অনলাইন পোস্ট থেকে আমি এই উদাহরণটি পেয়েছি এবং এতে কেবল আওয়াজ যোগ করেছি:

x=seq(pi, 10 * pi, 0.1)
y = 0.1 * x + sin(x) + rnorm(x)
y = ts(y, start=1800)

এখানে চিত্র বর্ণনা লিখুন

সাধারণত আমাদের স্ট্যাটারিটির জন্য ডেটা পরীক্ষা করতে হবে (বা কেবল উপরে বর্ণিত প্লটটি দেখুন) তবে আমরা জানি যে এর মধ্যে একটি প্রবণতা রয়েছে, তাই আসুন এই অংশটি এড়িয়ে চলুন এবং সরাসরি ডি-ট্রেন্ডিং পদক্ষেপে যান:

model=lm(y ~ I(1801:2083))
st.y = y - predict(model)

এখানে চিত্র বর্ণনা লিখুন

এখন আমরা প্রথমে acf()আর-তে ফাংশনটি দিয়ে এসিএফ তৈরি করে এই সময় সিরিজটি টেকল করার জন্য প্রস্তুত এবং তারপরে ফলাফলগুলি আমি যে অস্থায়ী লুপের সাথে রেখেছি তা তুলনা করে:

ACF = 0                  # Starting an empty vector to capture the auto-correlations.
ACF[1] = cor(st.y, st.y) # The first entry in the ACF is the correlation with itself (1).
for(i in 1:30){          # Took 30 points to parallel the output of `acf()`
  lag = st.y[-c(1:i)]    # Introducing lags in the stationary ts.
  clipped.y = st.y[1:length(lag)]    # Compensating by reducing length of ts.
  ACF[i + 1] = cor(clipped.y, lag)   # Storing each correlation.
}
acf(st.y)                            # Plotting the built-in function (left)
plot(ACF, type="h", main="ACF Manual calculation"); abline(h = 0) # and my results (right).

এখানে চিত্র বর্ণনা লিখুন


ঠিক আছে. এটা সফল ছিল। থেকে উপর PACF । হ্যাক করা আরও অনেক জটিল ... এখানে ধারণাটি হ'ল আবার কয়েক বার প্রাথমিক ts ক্লোন করা এবং তারপরে একাধিক সময় পয়েন্ট নির্বাচন করা। তবে, প্রাথমিক সময় সিরিজের সাথে কেবল সম্পর্ক স্থাপনের পরিবর্তে, আমরা সমস্ত ল্যাগগুলি একসাথে রেখেছি এবং একটি রিগ্রেশন বিশ্লেষণ করি, যাতে আগের সময়ের পয়েন্টগুলির দ্বারা বর্ণিত বৈকল্পিকতা বাদ দেওয়া যায় (নিয়ন্ত্রিত)। উদাহরণস্বরূপ, আমরা যদি ts_ on এ শেষ হওয়া PACF- এ ফোকাস করছি , আমরা , , এবং পাশাপাশি , এবং আমরা মাধ্যমেটিগুলিটি-4টিগুলিটিটিগুলিটি-1টিগুলিটি-2টিগুলিটি-3টিগুলিটি-4টিগুলিটি~টিগুলিটি-1+ +টিগুলিটি-2+ +টিগুলিটি-3+ +টিগুলিটি-4 উত্স এবং শুধুমাত্র জন্য সহগ রাখে :টিগুলিটি-4

PACF = 0          # Starting up an empty storage vector.
for(j in 2:25){   # Picked up 25 lag points to parallel R `pacf()` output.
  cols = j        
  rows = length(st.y) - j + 1 # To end up with equal length vectors we clip.

  lag = matrix(0, rows, j)    # The storage matrix for different groups of lagged vectors.

for(i in 1:cols){
  lag[ ,i] = st.y[i : (i + rows - 1)]  #Clipping progressively to get lagged ts's.
}
  lag = as.data.frame(lag)
  fit = lm(lag$V1 ~ . - 1, data = lag) # Running an OLS for every group.
  PACF[j] = coef(fit)[j - 1]           # Getting the slope for the last lagged ts.
}

এবং অবশেষে আবার পাশাপাশি প্লট করা, আর-উত্পন্ন এবং ম্যানুয়াল গণনা:

এখানে চিত্র বর্ণনা লিখুন

যে ধারণা সঠিক, সম্ভাব্য গণনীয় বিষয় পাশে, তুলনা দেখা যায় PACFথেকে pacf(st.y, plot = F)


কোড এখানে


1

ঠিক আছে, অনুশীলনে আমরা ত্রুটি (গোলমাল) পেয়েছি যা দ্বারা উপস্থাপন করা হয়েছে আত্মবিশ্বাস ব্যান্ডগুলি কোনও স্তরকে কেবল গোলমাল হিসাবে বিবেচনা করতে পারে কিনা তা নির্ধারণ করতে আপনাকে সহায়তা করে (কারণ প্রায় 95% বার ব্যান্ডগুলিতে আসবে)।টি


সিভিতে আপনাকে স্বাগতম, আপনি ওপি কীভাবে এটি করতে পারেন সে সম্পর্কে আরও কিছু বিশদ তথ্য যুক্ত করার বিষয়ে আপনি বিবেচনা করতে পারেন। প্রতিটি লাইনে কী উপস্থাপন করে সে সম্পর্কেও কিছু তথ্য যুক্ত হতে পারে?
পুনরায় খেলুন

1

এসিএফ গণনা করার জন্য এখানে অজগর কোডটি রয়েছে:

def shift(x,b):
    if ( b <= 0 ):
        return x
    d = np.array(x);
    d1 = d
    d1[b:] = d[:-b]
    d1[0:b] = 0
    return d1

# One way of doing it using bare bones
# - you divide by first to normalize - because corr(x,x) = 1
x = np.arange(0,10)
xo = x - x.mean()

cors = [ np.correlate(xo,shift(xo,i))[0]  for i in range(len(x1)) ]
print (cors/cors[0] )

#-- Here is another way - you divide by first to normalize
cors = np.correlate(xo,xo,'full')[n-1:]
cors/cors[0]

হুম্ম কোড কোড ফর্ম্যাটিংটি খারাপ ছিল:
সাদা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.