আর-তে অর্ধ-সাইনোসয়েডাল মডেলের জন্য কীভাবে ভাল ফিট পাবেন?


37

আমি ধরে নিতে চাই বাল্টিক সাগরের সমুদ্র পৃষ্ঠের তাপমাত্রা বছরের পর বছর একই বছর, এবং তারপরে একটি ফাংশন / লিনিয়ার মডেল সহ এটি বর্ণনা করি। আমার ধারণাটি ছিল কেবলমাত্র দশমিক সংখ্যা (বা num_months / 12) হিসাবে বছর ইনপুট করা এবং সেই সময়ের তাপমাত্রাটি কেমন হওয়া উচিত out আর-তে এটি lm () ফাংশনে ফেলে দেওয়া, এটি সাইনোসয়েডাল ডেটা সনাক্ত করতে পারে না তাই এটি কেবল একটি সরল রেখা তৈরি করে। সুতরাং আমি আই () বন্ধনীর মধ্যে সাইন () ফাংশনটি রেখেছি এবং ফাংশনটি ম্যানুয়ালি ফিট করার জন্য কয়েকটি মান চেষ্টা করেছি এবং এটি যা আমি চাই তার কাছাকাছি যায়। তবে গ্রীষ্মে সমুদ্রটি দ্রুত উষ্ণ হয়ে উঠছে এবং তার পরে শরত্রে ধীরে ধীরে শীতল হতে চলেছে ... সুতরাং মডেলটি প্রথম বছরটি ভুল, তারপরে কয়েক বছর পরে আরও সঠিক হয়ে যায়, এবং তারপরে ভবিষ্যতে আমি অনুমান করি যে এটি আরও বেশি হয়ে ওঠে এবং আরও ভুল।

আমার কাছে মডেলটি অনুমান করার জন্য আমি কীভাবে আর পেতে পারি, তাই আমাকে নিজেরাই সংখ্যা অনুমান করতে হবে না? এখানে মূল কীটি হ'ল আমি চাই যে এটি বছরের পর বছর একই মানগুলি তৈরি করে, কেবল এক বছরের জন্য সঠিক হবে না। আমি যদি গণিত সম্পর্কে আরও জানতাম তবে হয়ত আমি এটিকে পাপ () এর পরিবর্তে পোইসন বা গাউসির মতো কিছু হিসাবে অনুমান করতে পারি, তবে কীভাবে এটি করতে হয় তা আমি জানি না। একটি ভাল উত্তর কাছাকাছি পেতে যে কোনও সহায়তা প্রশংসিত হবে।

এখানে আমি ব্যবহার করা ডেটা এবং এ পর্যন্ত ফলাফল দেখানোর কোডটি এখানে:

# SST from Bradtke et al 2010
ToY <- c(1/12,2/12,3/12,4/12,5/12,6/12,7/12,8/12,9/12,10/12,11/12,12/12,13/12,14/12,15/12,16/12,17/12,18/12,19/12,20/12,21/12,22/12,23/12,24/12,25/12,26/12,27/12,28/12,29/12,30/12,31/12,32/12,33/12,34/12,35/12,36/12,37/12,38/12,39/12,40/12,41/12,42/12,43/12,44/12,45/12,46/12,47/12,48/12)
Degrees <- c(3,2,2.2,4,7.6,13,16,16.1,14,10.1,7,4.5,3,2,2.2,4,7.6,13,16,16.1,14,10.1,7,4.5,3,2,2.2,4,7.6,13,16,16.1,14,10.1,7,4.5,3,2,2.2,4,7.6,13,16,16.1,14,10.1,7,4.5)
SST <- data.frame(ToY, Degrees)
SSTlm <- lm(SST$Degrees ~ I(sin(pi*2.07*SST$ToY)))
summary(SSTlm)
plot(SST,xlim=c(0,4),ylim=c(0,17))
par(new=T)
plot(data.frame(ToY=SST$ToY,Degrees=8.4418-6.9431*sin(2.07*pi*SST$ToY)),type="l",xlim=c(0,4),ylim=c(0,17))

উত্তর:


44

এটি লিনিয়ার রিগ্রেশন দিয়ে করা যেতে পারে -

আপনি শুধু উভয় একটি প্রয়োজন এবং প্রতিটি ফ্রিকোয়েন্সিতে পরিভাষা।sincos

যে কোনও প্রশস্ততা এবং ধাপের সাথে মৌসুমতা পরিচালনা করতে আপনি লিনিয়ার রিগ্রেশনটিতে একটি এবং শব্দটি ব্যবহার করতে পারবেন তার কারণ হ'ল নিম্নলিখিত ত্রিকোণমিতিক পরিচয় :কসsincos

A 'জেনারাল' সাইন ওয়েভের প্রশস্ততা এবং ফেজ , রৈখিক সংমিশ্রণ হিসাবে লিখতে পারে written যেখানে এবং এর মতো এবং। দেখা যাক যে দুটি সমতুল্য:φ A পাপ ( x + φ ) একটি পাপ x + b cos x a b A = √ √AφAsin(x+φ)asinx+bcosxab sinφ=bএকজন=একটি2+ +2পাপφ=একটি2+ +2

একটিপাপ(এক্স)+ +কোসাইন্(এক্স)=একটি2+ +2(একটিএকটি2+ +2পাপ(এক্স)+ +একটি2+ +2কোসাইন্(এক্স))=একজন[পাপ(এক্স)কোসাইন্(φ)+ +কোসাইন্(এক্স)পাপ(φ)]=একজনপাপ(এক্স+ +φ)

এখানে 'বেসিক' মডেলটি রয়েছে:

 SSTlm <- lm(Degrees ~ sin(2*pi*ToY)+cos(2*pi*ToY),data=SST)
 summary(SSTlm)

[স্নিপ]

Coefficients:
                      Estimate Std. Error t value Pr(>|t|)    
(Intercept)              8.292      0.135   61.41   <2e-16 *** 
sin(2 * pi * ToY)       -5.916      0.191  -30.98   <2e-16 ***  
cos(2 * pi * ToY)       -4.046      0.191  -21.19   <2e-16 *** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

Residual standard error: 0.9355 on 45 degrees of freedom
Multiple R-squared: 0.969,      Adjusted R-squared: 0.9677 
F-statistic: 704.3 on 2 and 45 DF,  p-value: < 2.2e-16 

 plot(Degrees~ToY,ylim=c(1.5,16.5),data=SST)
 lines(SST$ToY,SSTlm$fitted,col=2)

পাপ ফিট

সম্পাদনা: গুরুত্বপূর্ণ নোট - শব্দটি কাজ করে কারণ ফাংশনটির সময়সীমা সেট করা হয়েছে যাতে এক পিরিয়ড = 1 ইউনিটের । যদি 1 এর থেকে আলাদা হয় তবে সময়টি , তার পরিবর্তে আপনার প্রয়োজন ।টি ω ( π / ω )2πটিটিω(2π/ω)টি

দ্বিতীয় সুরেলা সঙ্গে মডেল এখানে:

 SSTlm2 <- lm(Degrees ~ sin(2*pi*ToY)+cos(2*pi*ToY)
                        +sin(4*pi*ToY)+cos(4*pi*ToY),data=SST)
 summary(SSTlm2)

[স্নিপ]

Coefficients:
                  Estimate Std. Error  t value Pr(>|t|)    
(Intercept)        8.29167    0.02637  314.450  < 2e-16 ***  
sin(2 * pi * ToY) -5.91562    0.03729 -158.634  < 2e-16 ***  
cos(2 * pi * ToY) -4.04632    0.03729 -108.506  < 2e-16 ***  
sin(4 * pi * ToY)  1.21244    0.03729   32.513  < 2e-16 ***  
cos(4 * pi * ToY)  0.33333    0.03729    8.939 2.32e-11 ***  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

Residual standard error: 0.1827 on 43 degrees of freedom
Multiple R-squared: 0.9989,     Adjusted R-squared: 0.9988 
F-statistic:  9519 on 4 and 43 DF,  p-value: < 2.2e-16 

 plot(Degrees~ToY,ylab="Degrees",xlab="ToY",ylim=c(1.5,16.5),data=SST)
 lines(SSTlm2$fitted~ToY,col=2,data=SST)

পাপ ফিট 2

... এবং আরও, 6*pi*ToYইত্যাদি সহ, যদি ডেটাগুলিতে একটি সামান্য বিট ছিল তবে আমি সম্ভবত এই দ্বিতীয় মডেলটি দিয়ে থামিয়ে দেব।

পর্যাপ্ত শর্তাদির সাহায্যে আপনি যথাযথ অসমमित এবং এমনকি জেগড পর্যায়ক্রমিক ক্রমগুলি ফিট করতে পারেন তবে ফলস্বরূপ ফিটগুলি 'উইলগল' করতে পারে। sawtoothতৃতীয় (লাল) এবং চতুর্থ (সবুজ) সুরেলা বা সুরযুক্ত সুরক্ষার সাথে এখানে একটি সামঞ্জস্যপূর্ণ ফাংশন (এটি আপনার পর্যায়ক্রমিক ফাংশনের একটি মাপানো সংস্করণে যুক্ত করা হয়েছে)' s সবুজ ফিটটি গড়পড়তা কিছুটা কাছাকাছি তবে "উইগলি" (ফিট প্রতিটি পয়েন্টের মধ্য দিয়ে গেলেও পয়েন্টের মধ্যে ফিটটি খুব কম টানতে পারে)।

পাপ 3 এবং 4 ফিট

এখানে পর্যায়ক্রম মানে ডেটাতে একটি মৌসুমী মডেলের জন্য উপলব্ধ কেবল 12 ডিএফ। মডেলটিতে বাধা থাকলে, 11 অতিরিক্ত মৌসুমী পরামিতিগুলির জন্য আপনার কাছে কেবলমাত্র পর্যাপ্ত পরিমাণে স্বাধীনতা। আপনাকে জুড়তে যেহেতু দুই , প্রতিটি সুরেলা গত সুরেলা আপনি ফিট করতে পারে কেবলমাত্র আপনি অনুমতি দেবে সঙ্গে পদ এক গত মেয়াদে তাদের ষষ্ঠ সুরেলা (এবং যে এক একটি হতে হয়েছে ; মেয়াদ সবকিছু হতে হবে শূন্য, যখন মহাবিদ্যালয় 1 এবং -1 এর মধ্যে পরিবর্তিত হয়)।পাপকোসাইন্পাপ

যদি আপনি নন-মসৃণ সিরিজের তুলনায় এই পদ্ধতির চেয়ে মসৃণ ফিটগুলি চান তবে আপনি পর্যায়ক্রমিক স্প্লাইন ফিটগুলির মধ্যে নজর রাখতে চাইতে পারেন ।

তবুও আরেকটি পদ্ধতি হ'ল alতুযুক্ত ডমিগুলি ব্যবহার করা, তবে এটি কোনও মসৃণ পর্যায়ক্রমিক ক্রিয়া হয় তবে পাপ / কোস পদ্ধতির প্রায়শই ভাল।

Alityতুবিত্তের এই ধরণের পদ্ধতির সাথে এমন পরিস্থিতিতেও খাপ খাইয়ে নেওয়া যেতে পারে যেখানে seasonতু পরিবর্তন হচ্ছে, যেমন রাজ্য স্পেস মডেলের সাথে ত্রিকোনমিতি বা ডমি seasonতু ব্যবহার করা।


যদিও এখানে আলোচিত লিনিয়ার মডেল পদ্ধতির ব্যবহারটি সহজ, তবে @ সিওএলসিরদাশের ননলাইনার রিগ্রেশন পদ্ধতির একটি সুবিধা হ'ল এটি অনেক বিস্তৃত পরিস্থিতির সাথে মোকাবিলা করতে পারে - লিনিয়ার এমন পরিস্থিতিতে আপনার আগে খুব বেশি পরিবর্তন করতে হবে না রিগ্রেশনটি এখন আর উপযুক্ত নয় তবে অ-লাইনর সর্বনিম্ন স্কোয়ারগুলি এখনও ব্যবহার করা যেতে পারে ( অজানা সময় হওয়া যেমন একটির ক্ষেত্রে হতে পারে)।


অসাধারণ! আপনাকে ধন্যবাদ, আমার ফ্রিকোয়েন্সিগুলি মোকাবেলা করার পদ্ধতি সম্পর্কে আরও জানতে চেষ্টা করা উচিত। কেন কোস অংশের প্রয়োজন তা আমি পুরোপুরি বুঝতে পারি না, তবে নীতিটি জানার ফলে এটি কার্যকর করা সহজ হয়।
গাআরইউ

@ কোলসারড্যাশ - আসলে, আমি আশা করি আপনি নিজের উত্তরটি মুছে না ফেলেন (সত্যই আমি এটি উত্সাহিত করেছি); এটি পরিস্থিতিতে আরও বিস্তৃত অ্যারে কাজ করার সুবিধা রয়েছে; সমস্যাটি সম্পর্কে কয়েকটি জিনিস ঝাঁকুনি দিয়ে আপনি লিনিয়ারিটি হারাতে পারেন - এবং তারপরে আমার পদ্ধতিটি অকেজো, তবে আপনার এখনও কার্যকর। আমি মনে করি এটি সেভাবে করতে সক্ষম হওয়ার জন্য অনেক কিছু বলা দরকার।
Glen_b

@ গ্লেন_বি আহা দুঃখিত, আমি ভেবেছিলাম যে আপনার পোস্টটি আমারকে রিডান্ট্যান্ট করে দিয়েছে কারণ আমি সমস্যার সাথে মোকাবিলা করার মানক উপায়টি ব্যবহার করি নি। আমি এটি মুছে ফেলেছি।
COOLSerdash

@GaRyu আমার উত্তর, যেখানে আমি কেন যোগ করার একটি রূপরেখা দিতে উপরের অংশে আমার সম্পাদন করা দেখুন, কৌতুক আছে। কোসাইন্
Glen_b

1
এটি আমি ছিল না .... আপনি বলছেন যে অফসেটটি অফসেটের মতো যেন যা চলছে তার নাম দেওয়া হয়েছে, এবং এটি গাণিতিকভাবে করেছে। তবে আপনার পক্ষে মূল বক্তব্যটি সম্ভবত 31 ডিসেম্বর / জানুয়ারী রেডিয়েশনের প্রাপ্তির পরিবর্তনের পরিবর্তনের জন্য তাপমাত্রার প্রতিক্রিয়ায় পিছিয়ে থাকা বছরের সময় নির্ধারিত এক স্বেচ্ছাসেবী। তাই ফেজ অফসেটটি জলবায়ু সংক্রান্ত কিছুতেও এখানে একটি নাম, আপনার রেকর্ডিং সিস্টেমের তুলনায় ন্যূনতম এবং সর্বাধিক তাপমাত্রার সময়। (এটি একটি ছোটখাটো বিশদ তবে আমি 12 মাসের জন্য 1/4, 3/24, ..., 23/24 হিসাবে বছরের পরিমাণ নির্ধারণ করতে পছন্দ করি)
নিক কক্স

10

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

ToY <- c(1/12,2/12,3/12,4/12,5/12,6/12,7/12,8/12,9/12,10/12,11/12,12/12,13/12,14/12,15/12,16/12,17/12,18/12,19/12,20/12,21/12,22/12,23/12,24/12,25/12,26/12,27/12,28/12,29/12,30/12,31/12,32/12,33/12,34/12,35/12,36/12,37/12,38/12,39/12,40/12,41/12,42/12,43/12,44/12,45/12,46/12,47/12,48/12)
Degrees <- c(3,2,2.2,4,7.6,13,16,16.1,14,10.1,7,4.5,3,2,2.2,4,7.6,13,16,16.1,14,10.1,7,4.5,3,2,2.2,4,7.6,13,16,16.1,14,10.1,7,4.5,3,2,2.2,4,7.6,13,16,16.1,14,10.1,7,4.5)
SST <- data.frame(ToY, Degrees)

par(cex=1.5, bg="white")
plot(Degrees~ToY,xlim=c(0,4),ylim=c(0,17), pch=16, las=1)

nls.mod <-nls(Degrees ~ a + b*sin(2*pi*c*ToY), start=list(a = 1, b = 1, c=1))

co <- coef(nls.mod) 
f <- function(x, a, b, c) {a + b*sin(2*pi*c*x) }

curve(f(x, a=co["a"], b=co["b"], c=co["c"]), add=TRUE ,lwd=2, col="steelblue")

এনএলএস ফিট

তবে ফিট খুব একটা ভাল নয় বিশেষত শুরুতে। দেখে মনে হচ্ছে যে কোনও সাধারণ সাইন বক্ররেখা দ্বারা আপনার ডেটা পর্যাপ্ত পরিমাণে মডেল করা যায় না। হতে পারে আরও জটিল ত্রিকোণমিতিক ক্রিয়াটি কৌশলটি সম্পাদন করবে?

nls.mod2 <-nls(Degrees ~ a + b*sin(2*pi*c*ToY)+d*cos(2*pi*e*ToY), start=list(a = 1, b = 1, c=1, d=1, e=1))

co2 <- coef(nls.mod2) 
f <- function(x, a, b, c, d, e) {a + b*sin(2*pi*c*x)+d*cos(2*pi*e*x) }

curve(f(x, a=co2["a"], b=co2["b"], c=co2["c"], d=co2["d"], e=co2["e"]), add=TRUE ,lwd=2, col="red")

এনএলএস ফিট 2

লাল বক্ররেখা ডেটা আরও ভাল ফিট করে। সঙ্গে nlsফাংশন, আপনার মডেলকে আপনি কি মনে করেন উপযুক্ত মধ্যে লাগাতে পারেন।

অথবা আপনি forecastপ্যাকেজটি ব্যবহার করতে পারেন । নীচের উদাহরণে, আমি ধরে নিয়েছি যে সময় সিরিজটি ২০১০ সালের জানুয়ারিতে শুরু হয়েছিল:

library(forecast)

Degrees.ts <- ts(Degrees, start=c(2010,1), frequency=12)

Degree.trend <- auto.arima(Degrees.ts)

degrees.forecast <- forecast(Degree.trend, h=12, level=c(80,95), fan=F)

plot(degrees.forecast, las=1, main="", xlab="Time", ylab="Degrees")

Arima

যেহেতু ডেটা নির্বিচারক, তাই কোনও আত্মবিশ্বাস ব্যান্ড দেখানো হয় না।


4
এখানে অ-লাইনর সর্বনিম্ন-স্কোয়ারগুলির কোনও কারণ নেই, এটি উপযুক্তভাবে ভালভাবে কাজ করবে না তা নয়। পাপ (2 * পাই * টয়ওয়াই), কোস (2 * পিআই * টয়ওয়াই) আগে থেকে গণনা করুন এবং lm()অন্য যে কোন ভবিষ্যদ্বাণীকের মতো তাদের খাওয়ান । অন্য কথায়, lm()কোনও ত্রিকোণমিতি দেখার দরকার নেই। তবে অসম্পূর্ণতাকে ভালভাবে ক্যাপচার করার জন্য আপনার আর একটি মডেলের প্রয়োজন হতে পারে। আমি কোনও নিয়মিত আর ব্যবহারকারী নই তবে আমি প্রায়শই এই পন্থা অন্য কোথাও ব্যবহার করেছি (দেখুন stata-j Journal.com/sjpdf.html?articlenum=st0116 )।
নিক কক্স

@ নিককক্স ধন্যবাদ নিক, এটি খুব সহায়ক পরামর্শ। আমি আমার উত্তরটি কিছুটা আপডেট করব।
COOLSerdash

গ্লেন দ্রুত ছিল :)
COOLSerdash

1
@COOLserdash আমি সেখানে নিক কক্সের মন্তব্যও দেখতে পাইনি; আমি যখন আমার উত্তর তৈরি করছিলাম তখন এটি এসেছিল। (এই পদ্ধতির বেশ স্পষ্ট যদি আপনার কোন ফুরিয়ার সিরিজ দেখা করেছি।)
Glen_b

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