किसी कोण के चलन की गणना करते समय यह 360 -> 0 को पार कर जाता है
मेरे पास एक चर है जो दो वस्तुओं की सापेक्ष स्थिति का वर्णन करने वाले कोण को मापता है (अर्थात, 0-359 से लेकर), और मैं यह बताना चाहूंगा कि समय के साथ यह कैसे बदल गया है।
उदाहरण के लिए, यहां हमारे पास प्रति वर्ष 1 डिग्री बदलने वाली दो वस्तुओं की सापेक्ष स्थिति है:
year <- seq(1981, 2020)
angle <- c(seq(341, 359), seq(0, 20))
हालाँकि, वर्ष 2000 में होने वाले "क्रॉसओवर" के कारण यहां ढलान लेना निरर्थक है। मेरे पास अलग-अलग नमूनों की संख्या है, और कुछ में यह समस्या है और कुछ नहीं है। मैं एक प्राथमिकता नहीं जानता कि कौन से नमूने में यह समस्या होगी, और न ही जब क्रॉसओवर होता है, तो मैं बस कुछ प्रकार की ऑफसेट (यानी, पिछले 20 वर्षों में 360 जोड़) को लागू नहीं कर सकता।
क्या इस तथ्य के लिए लेखांकन, कोणीय रुझानों की गणना करने का एक स्वीकृत तरीका है कि 0 = 360?
जवाब
कोण के बारे में सोचो $y$ किसी भी समय $t$कोण में छोटे परिवर्तन के संचय के रूप में। प्रतीकात्मक रूप से, जब$f(t)$ समय पर कोण के परिवर्तन की दर है $t$ तथा $t_0$ टिप्पणियों की शुरुआत है,
$$y(t) = y(t_0) + \int_{t_0}^t f(t)\,\mathrm{d}t.$$
आपकी समस्या यह है $y(t)$ मॉडुलो दर्ज किया गया है $360$ डिग्री - शायद कुछ त्रुटि के साथ $\epsilon(t).$ यही है, आपने केवल मूल्यों का अवलोकन किया है
$$y^{*}(t) = y(t) + \epsilon(t) \mod 360.$$
हालाँकि, आप पुनर्निर्माण कर सकते हैं $y(t) + \epsilon(t)$बशर्ते आपके पास लगातार पर्याप्त अवलोकन हों। लगातार समय के लिए$t \lt s,$ नोटिस
$$y^{*}(s) - y^{*}(t) = y(s) - y(t) + \epsilon(s) - \epsilon(t) \mod 360 = \int_t^s f(t)\,\mathrm{d}t + \delta$$
कहां है $\delta$ त्रुटियों के योगदान के बराबर है $\epsilon(s)-\epsilon(t)$ प्लस, शायद, कुछ अभिन्न कई$360$ जब भी बीच में कोणीय विराम हुआ है $y^{*}(t)$ तथा $y^{*}(s).$अब, कुल त्रुटि का आकार प्रदान किया गया$|\epsilon(s)-\epsilon(t)|$ से कम है $180$डिग्री और बशर्ते कोण एक से अधिक बार घूमने नहीं गया, हम यह पता लगा सकते हैं कि क्या एक ब्रेक हुआ: यदि$|\epsilon(s)-\epsilon(t)| \gt 180,$ जोड़ना या घटाना $360$ से डिग्री $\delta$ से अंतराल में रखने के लिए $-180$ सेवा मेरे $+180$ डिग्री।
हालाँकि हम इन त्रुटियों को सीधे नहीं देख सकते हैं, अगर हम वेतन वृद्धि करने के लिए अक्सर पर्याप्त रूप से नमूना ले रहे हैं $y(t_i) - y(t_{i-1})$काफी छोटा है, हम इस समायोजन को केवल देखे गए अंतरों पर लागू करते हैं। इस प्रकार,
जब कभी $|y^{*}(s)-y^{*}(t)| \gt 180,$ जोड़ना या घटाना $360$ से डिग्री $\delta$ से अंतराल में रखने के लिए $-180$ सेवा मेरे $+180$ डिग्री।
समान रूप से, अंतर modulo की गणना करें $180$ लेकिन उनसे सीमा में व्यक्त करते हैं $-180$ सेवा मेरे $+180$ के बजाय डिग्री (जैसा कि पारंपरिक है) से रेंज $0$ सेवा मेरे $360.$
चलो समायोजित मूल्य कहते हैं $\delta^{*}(t,s),$ ताकि
$$y^{*}(s) - y^{*}(t) = \int_t^s f(t)\,\mathrm{d}t + \delta(t,s)^{*}.$$
यह समानता है, समानता मोडुलो नहीं$360.$ अब हम एंगल मोडुलो की रिकॉर्डिंग के प्रभाव को दूर कर सकते हैं $360$इन समायोजित अंतरों को समेट कर। जब कई बार अवलोकन किए जाते हैं$t_0 \lt t_1\lt \cdots \lt t_n,$ अपने पास
$$\begin{aligned} y^{*}(t_i) &= y^{*}(t_0) + \left[y^{*}(t_1) - y^{*}(t_0)\right] + \cdots + \left[y^{*}(t_i) - y^{*}(t_{i-1})\right] \\ &=y(t_0) + \int_{t_0}^{t_i} f(t)\,\mathrm{d}t + \delta(t_0,t_1)^{*} + \delta(t_1,t_2)^{*} + \cdots + \delta(t_{i-1},t_i)^{*} \\ &= y(t_i) + \left[\epsilon(t_i) - \epsilon(t_0)\right]. \end{aligned}$$
संगणना modulo के साथ समस्या $360$चला गया है: अब आप किसी भी प्रक्रिया का उपयोग कर सकते हैं जिसे आप प्रतिक्रिया देना चाहते हैं$y^{*}(t).$
यहाँ एक चित्रण काफी कठिन डेटासेट के साथ किया गया है। मॉडल के अनुसार डेटा उत्पन्न किया गया था$y(t) = 30t \mod 360$और 2020 के माध्यम से 1980 से प्रतिवर्ष मनाया साथ आईआईडी आम तौर पर मानक विचलन की त्रुटि वितरित$60$ डिग्री (एक बड़ी राशि)।
कच्चे डेटा में प्रवृत्ति मुश्किल से ही समझ में आती है, लेकिन कोण समायोजन एल्गोरिथ्म ने उन्हें स्पष्ट रूप से गठबंधन किया है। हम समायोजित डेटा के लिए एक न्यूनतम वर्ग मॉडल फिट कर सकते हैं, उदाहरण के लिए, इस परिणाम का उत्पादन:
कच्चे डेटा के लिए विस्तारित ऊर्ध्वाधर पैमाने फिट और इसके विचलन से संबंधित विवरण दिखाता है। संयोग से, इस उदाहरण में ढलान का अनुमान है$28.0 \pm 0.74$ डिग्री, उल्लेखनीय रूप से वास्तविक मूल्य से भिन्न नहीं है $30$ डिग्री (इस तुलना के लिए पी-मान है $1.1\%$) है।
मैं यह टिप्पणी करते हुए समाप्त करूंगा कि जब त्रुटियों का मानक विचलन होगा $\epsilon(t)$ से बड़ा (से बड़ा) है $180/2/\sqrt{2} \approx 64$डिग्री, मोटे तौर पर), कभी-कभी कोणीय समायोजन गलत होगा। यह मॉडल अवशेषों में 360 डिग्री के मान से अचानक परिवर्तन के रूप में दिखाई देगा। इस प्रकार, मॉडल के अवशेषों का एक नियमित विश्लेषण ऐसी समस्याओं का पता लगा सकता है, जिससे आप बेहतर फिट के लिए समायोजित मूल्यों को संशोधित कर सकते हैं। इसका विवरण आपके मॉडल और फिटिंग प्रक्रिया पर निर्भर करेगा।
इस R
कोड ने आंकड़े बनाए। "कोणों को समायोजित करें" पर यह दर्शाता है कि कैसे कोण समायोजन को कुशलता से गणना की जा सकती है।
#
# Specify the data-generation process.
#
year <- 1980:2020 # Dates to use
beta <- 30 # Annual rate of change
sigma <- 60 # Error S.D.
#
# Generate the data.
#
set.seed(17)
angle <- (year * beta + rnorm(length(year), 0, sigma)) %% 360
X <- data.frame(year, angle)
#
# Adjust the angles.
#
X$`total angle` <- with(X, { d <- (diff(angle) + 180) %% 360 - 180 cumsum(c(angle[1], d)) }) # # Fit a model to the adjusted angles. # fit <- lm(`total angle` ~ year, X) # # Analyze the fit. # b <- coefficients(fit) y.hat <- predict(fit) #--Compute dates the fit must wrap around from 360 to 0: y.breaks <- seq(floor(min(y.hat) / 360)*360, max(y.hat), by=360) year.breaks <- (y.breaks - b[1]) / b[2] #--Make the plots: u <- ceiling(max(X$`total angle`)/360)
par(mfcol=c(1,2))
#--The fits:
plot(X$year, X$angle, pch=19, ylim=c(0, 360), yaxp=c(0, 360, 4),
col="gray", ylab="Angle (degrees)", xlab="Year",
main="Raw Data and Fit")
for (x in year.breaks)
abline(c(-x * b[2], b[2]), col="Red", lwd=2)
plot(X$year, X$`total angle`, ylim=c(0,u*360), yaxp=c(0, u*360, u),
xlab="Year", ylab="Total angle",
main="Adjusted Data and Fit")
abline(fit, col="Red", lwd=2)
#--The raw data:
plot(X$year, X$angle, ylim=c(0,u*360), yaxp=c(0, u*360, u),
pch=19, col="gray", ylab="Angle (degrees)", xlab="Year",
main="Raw Data")
plot(X$year, X$`total angle`, ylim=c(0,u*360),
yaxp=c(0, u*360, u),
xlab="Year", ylab="Total angle",
main="Adjusted Data")
par(mfcol=c(1,1))