Từ góc độ thống kê: Biến đổi Fourier so với hồi quy với cơ sở Fourier


13

Tôi đang cố gắng để hiểu liệu biến đổi Fourier rời rạc có đại diện cho cùng một đường cong như là một hồi quy sử dụng cơ sở Fourier hay không. Ví dụ,

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)

FFT cho một số phức, trong khi hồi quy cho một số thực.

Họ có truyền đạt thông tin tương tự không? Có một bản đồ giữa hai bộ số không?

(Tôi sẽ đánh giá cao nếu câu trả lời được viết từ quan điểm của nhà thống kê thay vì quan điểm của kỹ sư. Nhiều tài liệu trực tuyến tôi có thể tìm thấy có thuật ngữ kỹ thuật ở khắp mọi nơi, khiến chúng trở nên ít ngon miệng hơn đối với tôi.)


Tôi không quen thuộc với đoạn mã của bạn, vì vậy không thể nói nếu vấn đề sau áp dụng ở đó. Tuy nhiên, thông thường, cơ sở DFT được xác định theo tần số tích phân ("toàn bộ số"), trong khi đó, "cơ sở phạm vi" chung cho hồi quy có thể sử dụng các tỷ số tần số tùy ý (ví dụ như các số vô tỷ, ít nhất là trong số học liên tục). Điều này cũng có thể được quan tâm.
GeoMatt22

Tôi nghĩ mọi người sẽ có lợi nếu bạn viết câu hỏi của bạn bằng thuật ngữ toán học (trái ngược với đoạn mã). Vấn đề hồi quy bạn giải quyết là gì? Các chức năng cơ bản Fourier bạn sử dụng là gì? Bạn sẽ ngạc nhiên về cách câu trả lời cho câu hỏi của bạn sẽ cải thiện.
Yair Daon

Câu trả lời:


15

Chúng giống nhau. Đây là cách ...

Làm một hồi quy

Giả sử bạn phù hợp với mô hình trong đó và . Tuy nhiên, điều này không phù hợp với hồi quy tuyến tính, vì vậy thay vào đó, bạn sử dụng một số lượng giác ( ) và phù hợp mô hình tương đương: Chạy hồi quy tuyến tính trên tất cả các tần số Fourier cung cấp cho bạn một bó ( ) betas: , . Đối với bất kỳt = 1 , ... , N n = sàn ( N / 2 ) cos ( một + b ) = cos ( một ) cos ( b ) - tội lỗi ( a ) tội lỗi

yt=j=1nAjcos(2πt[j/N]+ϕj)
t=1,,Nn= =sàn nhà(N/2)y t = n j = 1 β 1 , j cos ( 2 π t [ j / N ] ) + β 2 , j sin ( 2 π t [ j / N ] ) . { J / N : j = 1 , ... , n } 2 n { βcos(một+b)= =cos(một)cos(b)-tội(một)tội(b)
yt= =Σj= =1nβ1,jcos(2πt[j/N])+β2,jtội(2πt[j/N]).
{j/N:j= =1,Giáo dục,n}2ni=1,2j{β^Tôi,j}Tôi= =1,2j, nếu bạn muốn tính toán cặp bằng tay, bạn có thể sử dụng:

β 2,j=Σ N t = 1 ytsin(2πt[j/N])

β^1,j= =Σt= =1Nytcos(2πt[j/N])Σt= =1Ncos2(2πt[j/N])
và Đây là các công thức hồi quy tiêu chuẩn.
β^2,j= =Σt= =1Nyttội(2πt[j/N])Σt= =1Ntội2(2πt[j/N]).

Thực hiện chuyển đổi Fourier rời rạc

Khi bạn chạy biến đổi Fourier, bạn tính toán, với :j= =1,Giáo dục,n

d(j/N)= =N-1/2Σt= =1Nytđiểm kinh nghiệm[-2πTôit[j/N]]= =N-1/2(Σt= =1Nytcos(2πt[j/N])-TôiΣt= =1Nyttội(2πt[j/N])).

Đây là một số phức (chú ý ). Để xem lý do tại sao sự bình đẳng đó được giữ vững, hãy nhớ rằng , và .TôieTôix= =cos(x)+Tôitội(x)cos(-x)= =cos(x)tội(-x)= =-tội(x)

Đối với mỗi , lấy bình phương của liên hợp phức sẽ cung cấp cho bạn " biểu đồ :"j

|d(j/N)|2= =N-1(Σt= =1Nytcos(2πt[j/N]))2+N-1(Σt= =1Nyttội(2πt[j/N]))2.
Trong R, việc tính toán vectơ này sẽ I <- abs(fft(Y))^2/length(Y)là một điều kỳ lạ, bởi vì bạn phải mở rộng nó.

Ngoài ra, bạn có thể xác định "biểu đồ tỷ lệ " Rõ ràng . Trong R này sẽ là .

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

Sự kết nối giữa hai

Hóa ra mối liên hệ giữa hồi quy và hai biểu đồ là:

P(j/N)= =β^1,j2+β^2,j2.
Tại sao? Bởi vì cơ sở bạn đã chọn là trực giao / trực giao. Bạn có thể hiển thị cho mỗi rằng . Cắm nó vào mẫu số của các công thức của bạn cho các hệ số hồi quy và voila.jΣt= =1Ncos2(2πt[j/N])= =Σt= =1Ntội2(2πt[j/N])= =N/2

Nguồn: https://www.amazon.com/Time-Analysis-Its-Appluggest-Statistic/dp/144197864X


1
+1 cho câu trả lời và nguồn. Nó cũng sẽ tốt nếu bạn có thể chứng minh kết quả với các Rđối tượng tôi đã đăng.
qoheleth

@qoheleth Tôi sẽ để lại cho bạn. Chỉ cần mệt mỏi về cách fft()không mở rộng quy mô như cách tôi đã viết (tôi đã đề cập đến điều này), rằng tôi đã không chứng minh bất cứ điều gì với các lệnh chặn, và điều đó làm cho create.fourier.basis()các chức năng cơ bản trở nên kỳ lạ.
Taylor

6

Họ có liên quan mạnh mẽ. Ví dụ của bạn không thể lặp lại được vì bạn không bao gồm dữ liệu của mình, do đó tôi sẽ tạo một dữ liệu mới. Trước hết, hãy tạo một hàm tuần hoàn:

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)

nhập mô tả hình ảnh ở đây

Bây giờ, hãy tạo một cơ sở Fourier cho hồi quy. Lưu ý rằng, với , việc tạo ra nhiều hơn hàm cơ bản , nghĩa là không phải là hằng số, vì các thành phần tần số cao hơn được đặt bí danh trên một lưới như vậy. Ví dụ: một sin có tần số không thể phân biệt được với một chi phí (sin): xem xét trường hợp , tức là . Dù sao, nếu bạn muốn kiểm tra lại, chỉ cần thay đổi để trong đoạn mã dưới đây và nhìn vào hai cột cuối cùng: bạn sẽ thấy rằng họ đang thực sự vô dụng (và họ tạo ra các vấn đề cho phù hợp, bởi vì ma trận thiết kế hiện nay là số ít ).N= =2k+1N-2N-3= =2(k-1)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)

nhập mô tả hình ảnh ở đây

Lưu ý rằng tần số chính xác là đúng, nhưng biên độ của các thành phần khác không phải là (1,2,3,4). Lý do là các fdahàm cơ sở Fourier được chia tỷ lệ theo một cách kỳ lạ: giá trị tối đa của chúng không phải là 1, vì nó sẽ dành cho cơ sở Fourier thông thường . Nó cũng không phải là , vì nó sẽ dành cho cơ sở Fourier trực giao, .1,tộiωx,cosωx,Giáo dục1π12π,tộiωxπ,cosωxπ,Giáo dục

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

nhập mô tả hình ảnh ở đây

Bạn thấy rõ rằng:

  1. giá trị tối đa nhỏ hơn1π
  2. cơ sở Fourier (được cắt theo các thuật ngữ đầu tiên ) chứa hàm không đổi (đường màu đen), các tần số tăng dần (các đường cong bằng 0 tại các ranh giới miền) và các cosin có tần số tăng dần (các đường cong là bằng 1 tại các ranh giới miền), vì nó phải làN-2

Chỉ cần nhân rộng cơ sở Fourier được cung cấp bởi fda, để có được cơ sở Fourier thông thường, dẫn đến các hệ số hồi quy có các giá trị mong đợi:

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")

nhập mô tả hình ảnh ở đây

Hãy thử fftngay bây giờ: lưu ý rằng vì Yperlà một chuỗi tuần hoàn, điểm cuối cùng không thực sự thêm bất kỳ thông tin nào (DFT của chuỗi luôn luôn là định kỳ). Do đó, chúng ta có thể loại bỏ điểm cuối cùng khi tính toán FFT. Ngoài ra, FFT chỉ là một thuật toán số nhanh để tính toán DFT và DFT của một chuỗi các số thực hoặc số phức là phức tạp . Vì vậy, chúng tôi thực sự muốn các mô-đun của các hệ số FFT:

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

Chúng tôi nhân với để có cùng tỷ lệ với cơ sở Fourier . Nếu chúng tôi không mở rộng quy mô, chúng tôi vẫn sẽ phục hồi tần số chính xác, nhưng tất cả các biên độ sẽ được điều chỉnh theo cùng một yếu tố liên quan đến những gì chúng tôi tìm thấy trước đây. Bây giờ chúng ta hãy vẽ các hệ số fft:2N-11,tộiωx,cosωx,Giáo dục

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")

nhập mô tả hình ảnh ở đây

Ok: tần số là chính xác, nhưng lưu ý rằng bây giờ các hàm cơ bản không còn là sin và cosin nữa (chúng là số mũ phức tạp , trong đó với tôi biểu thị đơn vị tưởng tượng). Cũng lưu ý rằng thay vì một bộ tần số khác không (1,2,3,4) như trước đây, chúng tôi đã có một bộ (1,2,5). Lý do là một thuật ngữ trong việc mở rộng hệ số phức này (do đó là phức tạp) tương ứng với hai thuật ngữ thực trong Mở rộng cơ sở lượng giác, do công thức Euler . Mô-đun của hệ số phức bằng tổng của phương trình bậc hai của hai hệ số thực, nghĩa làđiểm kinh nghiệmnTôiωxTôixnđiểm kinh nghiệmnTôiωxxnmộtnSTôin(nωx)+bncoS(nωx)điểm kinh nghiệmTôix= =cosx+Tôitộix|xn|= =mộtn2+bn2 . Thực tế, .5= =33+42


1
cảm ơn DeltaIV, dữ liệu dailyđi kèm với fdagói.
qoheleth

@qoheleth tôi không biết. Tối nay tôi sẽ sửa đổi câu trả lời của mình bằng cách sử dụng tập dữ liệu của bạn và tôi sẽ làm rõ một vài điểm.
DeltaIV
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.