একটি পরিসংখ্যানগত দৃষ্টিকোণ থেকে: ফুরিয়ার ভিত্তিতে ফুরিয়ার বনাম রিগ্রেশন রূপান্তর


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)

এফএফটি একটি জটিল সংখ্যা দেয়, যেখানে রিগ্রেশন একটি আসল নম্বর দেয়।

তারা কি একই তথ্য দেয়? দুই সেট সংখ্যার মধ্যে কি এক থেকে এক মানচিত্র রয়েছে?

(যদি উত্তরটি ইঞ্জিনিয়ারের দৃষ্টিভঙ্গির পরিবর্তে পরিসংখ্যানবিদদের দৃষ্টিকোণ থেকে লেখা হয় তবে আমি প্রশংসা করব Many


আমি আপনার কোড স্নিপেটের সাথে পরিচিত নই, সুতরাং নীচের সমস্যাটি সেখানে প্রযোজ্য কিনা তা বলতে পারব না। যাইহোক, সাধারণত DFT ভিত্তিতে পদ সংজ্ঞায়িত করা হয় অবিচ্ছেদ্য ( "পূর্ণ সংখ্যা") ফ্রিকোয়েন্সি রিগ্রেশন জন্য একটি সাধারণ "ফুরিয়ার ভিত্তিতে" নির্বিচারে ফ্রিকোয়েন্সি অনুপাত ব্যবহার করতে পারে যেহেতু (যেমন irrationals সহ, ক্রমাগত গাণিতিক অন্তত)। এই এছাড়াও সুদের হতে পারে।
জিওম্যাট 2222

আমি মনে করি আপনি যদি গণিতের পদগুলিতে (কোড স্নিপেটের বিপরীতে) আপনার প্রশ্ন লিখেন তবে প্রত্যেকের উপকার হবে। রিগ্রেশন সমস্যাটি কী সমাধান করবেন? আপনি ব্যবহৃত ফুরিয়ার বেস ফাংশনগুলি কী কী? আপনার প্রশ্নের উত্তর কীভাবে উন্নতি হবে তা অবাক হয়ে যাবেন।
ইয়ার দাওন

উত্তর:


15

তারা একই। এখানে ...

একটি রিগ্রেশন করা

বলুন আপনি যেখানে এবং the মডেল ফিট করে বলুন । এটি লিনিয়ার রিগ্রেশন-এর জন্য উপযুক্ত নয়, তবে এর পরিবর্তে আপনি কিছু ত্রিকোণমিতি ( ) এবং ফিট করুন সমমানের মডেল: সমস্ত ফুরিয়ার ফ্রিকোয়েন্সি on এ রৈখিক রিগ্রেশন চালনা আপনাকে বিটাসের একগুচ্ছ ( ) দেয়: , । যে কোনও

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)যা এক ধরণের অদ্ভুত, কারণ আপনাকে এটি স্কেল করতে হবে।

এছাড়াও আপনি " স্কেলড পিরিওডোগ্রাম " পরিষ্কারভাবে । আর এ হবে ।

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

দুজনের মধ্যে সংযোগ

এটি রিগ্রেশন এবং দুটি পিরিওড্রামের মধ্যে সংযোগ স্থাপন করে:

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- প্রয়োগসমূহ- পরিসংখ্যান / dp / 144197864X


1
উত্তর এবং উত্স জন্য +1। আপনার Rপোস্ট করা বস্তুগুলির সাথে যদি আপনি ফলাফলটি প্রদর্শন করতে পারেন তবে এটিও ভাল ।
কোহলেথ

@ কোহলেথ আমি এটি আপনার কাছে রেখে দেব। fft()আমি যেভাবে লিখেছি ( কীভাবে আমি ইতিমধ্যে এটি উল্লেখ করেছি) যেভাবে স্কেল করে না সে সম্পর্কে ক্লান্ত হয়ে পড়ুন , যে আমি বাধা দিয়ে কিছু প্রমাণ করি নি, এবং এটি create.fourier.basis()বেসিক ফাংশনগুলিকে অদ্ভুতভাবে স্কেল করে।
টেলর

6

তারা দৃ strongly়ভাবে সম্পর্কিত। আপনার উদাহরণটি পুনরায় উত্পাদনযোগ্য নয় কারণ আপনি আপনার ডেটা অন্তর্ভুক্ত করেননি, সুতরাং আমি একটি নতুন তৈরি করব। প্রথমত, আসুন একটি পর্যায়ক্রমিক ফাংশন তৈরি করুন:

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)

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

এখন, রিগ্রেশন এর জন্য একটি ফুরিয়ার ভিত্তি তৈরি করা যাক। নোট করুন যে, দিয়ে ভিত্তিক ফাংশন, যেমন, অ ধ্রুবক সাইন এবং কোসাইনগুলি তৈরি করার পক্ষে এটি সত্যিকার অর্থে বোধগম্য নয় কারণ উচ্চতর ফ্রিকোয়েন্সি উপাদানগুলি যেমন গ্রিড উপর aliised হয়। উদাহরণস্বরূপ, ফ্রিকোয়েন্সি সাইন একটি costant (সাইন) থেকে হয় আলাদা করে চেনা: ক্ষেত্রে বিবেচনা , অর্থাৎ । যাই হোক, আপনি যদি ডবল চেক করতে চান, শুধু পরিবর্তন করতে গত দুই কলাম এ নিচের স্নিপেট এবং চেহারা দেখুন: আপনি যে তারা আসলে অনর্থক আছেন কিনা তা দেখতে হবে (এবং তারা হইয়া জন্য সমস্যা তৈরি করতে, কারণ নকশা ম্যাট্রিক্স এখন একবচন হল )।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 হয় না, এটি সাধারণ ফুরিয়ার ভিত্তিতে যেমন হয় । এটি হয় না, যেমন এটি অর্থনোমাল ফিউরিয়ার ভিত্তিতে হত, rac ।1,sinωx,cosωx,1π12π,sinωxπ,cosωxπ,

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

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

আপনি পরিষ্কারভাবে দেখতে পাবেন যে:

  1. সর্বাধিক মান than এর চেয়ে কম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একটি পর্যায়ক্রমিক ক্রম, শেষ পয়েন্টটি আসলে কোনও তথ্য যুক্ত করে না (একটি ক্রমের DFT সর্বদা পর্যায়ক্রমিক)। সুতরাং আমরা এফএফটি কম্পিউটিংয়ের সময় শেষ পয়েন্টটি বাতিল করতে পারি। এছাড়াও, এফএফটি হ'ল ডিএফটি গণনা করার জন্য একটি দ্রুত সংখ্যাসূচক অ্যালগরিদম এবং বাস্তব বা জটিল সংখ্যার ক্রমের ডিএফটি জটিল । সুতরাং, আমরা সত্যিই এফএফটি সহগের মডুলাসগুলি চাই:

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

সংখ্যাবৃদ্ধি দ্বারা আমরা অর্ডার ফুরিয়ার ভিত্তিতে সঙ্গে হিসাবে একই স্কেলিং আছে মধ্যে । যদি আমরা স্কেল না করি তবে আমরা এখনও সঠিক ফ্রিকোয়েন্সিগুলি পুনরুদ্ধার করতে পারব, তবে এর আগে যা আমরা পেয়েছি তার প্রতি শ্রদ্ধাগুলি একই ফ্যাক্টর দ্বারা স্কেল করা হবে। আসুন এখন fft সহগগুলি প্লট করুন: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
ধন্যবাদ ডেল্টাভিও, ডেটা প্যাকেজটি dailyনিয়ে আসে fda
Qoheleth

@ কোহেলেথ আমি জানতাম না। এই সন্ধ্যায় আমি আপনার ডেটাসেট ব্যবহার করে আমার উত্তরটি সংশোধন করব এবং আমি কয়েকটি পয়েন্ট পরিষ্কার করব।
ডেল্টাভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.