एक सांख्यिकीय दृष्टिकोण से: फूरियर फूरियर बनाम आधार के साथ प्रतिगमन को रूपांतरित करता है


13

मैं यह समझने की कोशिश कर रहा हूं कि क्या असतत फूरियर ट्रांसफर फूरियर के आधार पर एक प्रतिगमन के रूप में एक वक्र के समान प्रतिनिधित्व देता है। उदाहरण के लिए,

library(fda)
Y=daily$tempav[,1] ## my data
length(Y) ## =365

## create Fourier basis and estimate the coefficients
mybasis=create.fourier.basis(c(0,365),365)  
basisMat=eval.basis(1:365,mybasis)
regcoef=coef(lm(Y~basisMat-1))

## using Fourier transform
fftcoef=fft(Y)

## compare
head(fftcoef)
head(regcoef)

एफएफटी एक जटिल संख्या देता है, जबकि प्रतिगमन एक वास्तविक संख्या देता है।

क्या वे समान जानकारी देते हैं? क्या संख्याओं के दो सेटों के बीच एक से एक मानचित्र है?

(मैं सराहना करूंगा कि यदि जवाब इंजीनियर के दृष्टिकोण के बजाय सांख्यिकीविद् के दृष्टिकोण से लिखा गया है। कई ऑनलाइन सामग्री मुझे मिल सकती हैं, जो पूरे स्थान पर इंजीनियरिंग शब्दजाल है, जो उन्हें मेरे लिए कम उपयुक्त बनाती हैं।)


मैं आपके कोड स्निपेट से परिचित नहीं हूं, इसलिए यह नहीं कह सकता कि क्या निम्नलिखित समस्या वहां लागू होती है। हालांकि, आम तौर पर डीएफटी आधार को अभिन्न ("पूरी संख्या") आवृत्तियों के रूप में परिभाषित किया जाता है , जबकि प्रतिगमन के लिए एक सामान्य "फूरियर आधार" मनमाने ढंग से आवृत्ति अनुपात का उपयोग कर सकता है (जैसे तर्कहीन, कम से कम निरंतर अंकगणितीय में)। यह रुचि का भी हो सकता है।
जियोमैट 22

मुझे लगता है कि अगर आप गणित की शर्तों के अनुसार अपना प्रश्न लिखते हैं तो हर किसी को फायदा होगा (कोड स्निपेट के विपरीत)। आपके द्वारा हल की गई प्रतिगमन समस्या क्या है? आपके द्वारा उपयोग किए जाने वाले फूरियर बेस फ़ंक्शन क्या हैं आपको आश्चर्य होगा कि आपके प्रश्न के उत्तर कैसे सुधरेंगे।
यार दून

जवाबों:


15

वे एक ही हैं। ऐसे...

एक प्रतिगमन करना

आप मॉडल को फिट करते हैं जहां और । यह रैखिक प्रतिगमन के लिए उपयुक्त नहीं है, हालांकि, इसलिए आप कुछ त्रिकोणमिति ( ) और फिट का उपयोग करते हैं समतुल्य मॉडल: फूरियर आवृत्तियों के सभी पर रैखिक प्रतिगमन चल रहा है आपको betas का एक गुच्छा ( ) देता है : , । किसी भी

yt=j=1nAjcos(2πt[j/N]+ϕj)
t=1,,Nn=floor(N/2)cos(a+b)=cos(a)cos(b)sin(a)sin(b)
yt=j=1nβ1,jcos(2πt[j/N])+β2,jsin(2πt[j/N]).
{j/N:j=1,,n}2n{β^i,j}i=1,2j, यदि आप हाथ से जोड़ी की गणना करना चाहते हैं, तो आप उपयोग कर सकते हैं:

β^1,j=t=1Nytcos(2πt[j/N])t=1Ncos2(2πt[j/N])
और ये मानक प्रतिगमन सूत्र हैं।
β^2,j=t=1Nytsin(2πt[j/N])t=1Nsin2(2πt[j/N]).

एक असतत फूरियर रूपांतरण करना

जब आप एक फूरियर ट्रांसफॉर्म चलाते हैं, तो आप लिए गणना करते हैं :j=1,,n

d(j/N)=N1/2t=1Nytexp[2πit[j/N]]=N1/2(t=1Nytcos(2πt[j/N])it=1Nytsin(2πt[j/N])).

यह एक जटिल संख्या है (सूचना )। यह देखने के लिए कि यह समानता क्यों है, ध्यान रखें कि , और ।ieix=cos(x)+isin(x)cos(x)=cos(x)sin(x)=sin(x)

प्रत्येक , जटिल संयुग्म का वर्ग लेना आपको " पीरियडोग्राम :" देता है।j

|d(j/N)|2=N1(t=1Nytcos(2πt[j/N]))2+N1(t=1Nytsin(2πt[j/N]))2.
आर में, इस वेक्टर की गणना होगी I <- abs(fft(Y))^2/length(Y), जो अजीब है, क्योंकि आपको इसे स्केल करना है।

इसके अलावा आप " स्केल्ड पीरोग्राम " को परिभाषित कर सकते हैं स्पष्ट रूप से | R में यह होगा ।

P(j/N)=(2Nt=1Nytcos(2πt[j/N]))2+(2Nt=1Nytsin(2πt[j/N]))2.
P(j/N)=4N|d(j/N)|2P <- (4/length(Y))*I[(1:floor(length(Y)/2))]

दोनों के बीच संबंध

यह प्रतिगमन और दो आवधिक के बीच के संबंध को बताता है:

j Σ एन टी = 1 क्योंकि 2 ( 2 π टी [ j / एन ] ) = Σ एन टी = 1 पाप 2 ( 2 π टी [ j / एन ] ) = एन / 2

P(j/N)=β^1,j2+β^2,j2.
क्यों? क्योंकि आपके द्वारा चुना गया आधार ऑर्थोगोनल / ऑर्थोनॉर्मल है। आप प्रत्येक लिए दिखा सकते हैं कि । प्रतिगमन गुणांक और वॉइला के लिए अपने सूत्रों के हर में प्लग करें।jt=1Ncos2(2πt[j/N])=t=1Nsin2(2πt[j/N])=N/2

स्रोत: https://www.amazon.com/Time-Analysis-Its-Applications-Statistics/dp/144787878XX


1
उत्तर और स्रोत के लिए +1। यह अच्छा होगा यदि आप Rमेरे द्वारा पोस्ट की गई वस्तुओं के साथ परिणाम प्रदर्शित कर सकते हैं ।
किओलेथ

@qoheleth मैं आपको छोड़ दूँगा। बस इस बात से थके रहो कि fft()मैंने जिस तरह से लिखा है (मैंने पहले ही इस बात का उल्लेख नहीं किया है), कि मैंने इंटरसेप्ट के साथ कुछ भी साबित नहीं किया है, और यह create.fourier.basis()आधार कार्यों को अजीब तरीके से मापता है।
टेलर

6

वे दृढ़ता से संबंधित हैं। आपका उदाहरण प्रतिलिपि प्रस्तुत करने योग्य नहीं है क्योंकि आपने अपना डेटा शामिल नहीं किया था, इस प्रकार मैं एक नया बनाऊंगा। सबसे पहले, चलो एक आवधिक कार्य बनाएँ:

T <- 10
omega <- 2*pi/T
N <- 21
x <- seq(0, T, len = N)
sum_sines_cosines <- function(x, omega){
    sin(omega*x)+2*cos(2*omega*x)+3*sin(4*omega*x)+4*cos(4*omega*x)
}
Yper <- sum_sines_cosines(x, omega)
Yper[N]-Yper[1] # numerically 0

x2 <- seq(0, T, len = 1000)
Yper2 <- sum_sines_cosines(x2, omega)
plot(x2, Yper2, col = "red", type = "l", xlab = "x", ylab = "Y")
points(x, Yper)

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

अब, चलो प्रतिगमन के लिए एक फूरियर का आधार बनाते हैं। ध्यान दें कि, , वास्तव में आधार फ़ंक्शंस से अधिक बनाने का कोई मतलब नहीं है , अर्थात, गैर-स्थिर साइन और कोज़ाइन, क्योंकि उच्च आवृत्ति घटक इस तरह के एक ग्रिड पर उतारा जाता है। उदाहरण के लिए, आवृत्ति ome का एक साइन एक कॉस्टेंट (साइन) से अप्रभेद्य है: , अर्थात, के मामले पर विचार करें । वैसे भी, अगर तुम दोहरी जांच करना चाहते हैं, बस बदलने के लिए अंतिम दो कॉलम में नीचे टुकड़ा और देखो में: यदि आप कि वे वास्तव में बेकार कर रहे हैं देखेंगे (और वे फिट करने के लिए मुद्दों बनाने के लिए, क्योंकि डिजाइन मैट्रिक्स अब विलक्षण है )।N=2k+1N2N3=2(k1)kωN=3k=1N-2N

# Fourier Regression with fda
library(fda)
mybasis <- create.fourier.basis(c(0,T),N-2)
basisMat <- eval.basis(x, mybasis)
FDA_regression <- lm(Yper ~ basisMat-1)
FDA_coef <-coef(FDA_regression)
barplot(FDA_coef)

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

ध्यान दें कि आवृत्तियाँ बिल्कुल सही हैं, लेकिन गैर-अक्षीय घटकों के आयाम (1,2,3,4) नहीं हैं। इसका कारण यह है कि fdaफूरियर के आधार कार्यों को एक अजीब तरीके से बढ़ाया जाता है: उनका अधिकतम मूल्य 1 नहीं है, क्योंकि यह सामान्य फूरियर के आधार पर होगा । यह या तो नहीं है, क्योंकि यह ऑर्थोनॉमिक फ़ॉरियर आधार के लिए होता है, ।1,sinωx,cosωx,1π12π,sinωxπ,cosωxπ,

# FDA basis has a weird scaling
max(abs(basisMat))
plot(mybasis)

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

आप स्पष्ट रूप से देखते हैं कि:

  1. अधिकतम मान1π
  2. फूरियर बेस (पहली शर्तों के लिए छोटा ) में एक निरंतर कार्य (काली रेखा) होती है, बढ़ती आवृत्ति की सीन्स (घटता जो डोमेन सीमाओं पर 0 के बराबर होती है) और बढ़ती आवृत्ति की कोज्या (घटता जो होती हैं) डोमेन सीमाओं पर 1 के बराबर), जैसा कि यह होना चाहिएN2

बस द्वारा दिए गए फूरियर बेस को स्केल करना fda, ताकि सामान्य फ़ॉयर आधार प्राप्त हो, प्रतिगमन गुणांक की उम्मीद मूल्यों की ओर जाता है:

basisMat <- basisMat/max(abs(basisMat))
FDA_regression <- lm(Yper ~ basisMat-1)
FDA_coef <-coef(FDA_regression)
barplot(FDA_coef, names.arg = colnames(basisMat), main = "rescaled FDA coefficients")

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

आइए fftअब कोशिश करें : ध्यान दें कि चूंकि Yperएक आवधिक अनुक्रम है, अंतिम बिंदु वास्तव में कोई जानकारी नहीं जोड़ता है (अनुक्रम का डीएफटी हमेशा आवधिक होता है)। इस प्रकार हम FFT की गणना करते समय अंतिम बिंदु को छोड़ सकते हैं। इसके अलावा, एफएफटी डीएफटी की गणना करने के लिए सिर्फ एक तेज संख्यात्मक एल्गोरिथ्म है, और वास्तविक या जटिल संख्याओं के अनुक्रम का डीएफटी जटिल है । इस प्रकार, हम वास्तव में एफएफटी गुणांक के मोडुलस चाहते हैं:

# FFT
fft_coef <- Mod(fft(Yper[1:(N-1)]))*2/(N-1)

हम Fourier आधार के समान स्केलिंग करने के लिए से । यदि हम पैमाने पर नहीं थे, तो हम अभी भी सही आवृत्तियों को पुनर्प्राप्त करेंगे, लेकिन एम्पलीट्यूड को उसी कारक से बढ़ाया जाएगा, जो हमें पहले मिला था। आइए अब फफूंद गुणांकों की साजिश करें:2N11,sinωx,cosωx,

fft_coef <- fft_coef[1:((N-1)/2)]
terms <- paste0("exp",seq(0,(N-1)/2-1))
barplot(fft_coef, names.arg = terms, main = "FFT coefficients")

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

ठीक है: आवृत्तियाँ सही हैं, लेकिन ध्यान दें कि अब आधार फ़ंक्शंस साइन नहीं हैं और कॉशन किसी भी अधिक (वे जटिल एक्सपोनेंशियल , जहां साथ काल्पनिक इकाई को निरूपित करता हूं)। यह भी ध्यान दें कि पहले की तरह नॉनजो फ्रीक्वेंसी (1,2,3,4) के सेट के बजाय, हमें एक सेट (1,2,5) मिला। कारण यह है कि एक शब्द इस जटिल गुणांक विस्तार में (इस प्रकार दो वास्तविक रूप से मेल खाती है जटिल है) में त्रिकोणमितीय आधार विस्तार, यूलर फॉर्मूले के कारण । जटिल गुणांक का मापांक दो वास्तविक गुणांकों के चतुर्थांश के योग के बराबर है, अर्थात,expniωxixnexpniωxxnansin(nωx)+bncos(nωx)expix=cosx+isinx 5=|xn|=an2+bn2 । तथ्य की बात के रूप में, ।5=33+42


1
धन्यवाद DeltaIV, डेटा पैकेज के dailyसाथ आता है fda
किओलेथ

@qoheleth मुझे नहीं पता था। आज शाम को मैं आपके डेटासेट का उपयोग करके अपने उत्तर को संशोधित करूंगा, और मैं कुछ बिंदुओं को स्पष्ट करूंगा।
डेल्टावि
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.