আরে ডেটাতে বহুপদী মডেল ফিট করা


86

আমি এই প্রশ্নের উত্তরগুলি পড়েছি এবং সেগুলি বেশ সহায়ক, তবে বিশেষত আর এর জন্য আমার সাহায্য দরকার I

আমার কাছে আর তে একটি উদাহরণ ডেটা সেট করা আছে:

x <- c(32,64,96,118,126,144,152.5,158)  
y <- c(99.5,104.8,108.5,100,86,64,35.3,15)

আমি এই তথ্যগুলিতে একটি মডেল ফিট করতে চাই যাতে এটি y = f(x)। আমি এটি একটি তৃতীয় আদেশের বহুবর্ষীয় মডেল হতে চাই।

আমি আর এ কীভাবে করব?

অধিকন্তু, আর আমাকে সেরা ফিটিং মডেলটি খুঁজতে সহায়তা করতে পারে?

উত্তর:


102

X (x ^ 3) এ তৃতীয় অর্ডার বহুপদী পেতে, আপনি এটি করতে পারেন

lm(y ~ x + I(x^2) + I(x^3))

বা

lm(y ~ poly(x, 3, raw=TRUE))

আপনি একটি দশম অর্ডার বহুত্বের ফিট করতে পারেন এবং একটি নিকট-নিখুঁত ফিট পেতে পারেন, তবে আপনার উচিত?

সম্পাদনা: পলি (এক্স, 3) সম্ভবত একটি ভাল পছন্দ (নীচে @ হ্যাডলি দেখুন)।


6
"আপনি উচিত" জিজ্ঞাসা স্পট হয়। নমুনা তথ্যটিতে কেবল 8 টি পয়েন্ট রয়েছে। স্বাধীনতার ডিগ্রিগুলি এখানে বেশ কম। বাস্তব জীবনের ডেটা অবশ্যই অনেক বেশি থাকতে পারে।
— জেডি লং

4
আপনার উত্তরের জন্য ধন্যবাদ. সেরা ফিটিং মডেলটি পেতে আর কী হবে? এটির জন্য কোনও কার্যকারিতা আছে?
— মেহপার সি। পালাভুজলার

4
এটি আপনার "সেরা মডেল" এর সংজ্ঞা উপর নির্ভর করে। যে মডেল আপনাকে সর্বাধিক আর R 2 দেয় (যা 10 তম অর্ডারের বহুপদী থাকে) অগত্যা "সেরা" মডেল নয়। আপনার মডেলের শর্তাদি যথাযথভাবে চয়ন করা প্রয়োজন। আপনি অনেকগুলি পরামিতি সহ একটি নিখুঁত-নিখুঁত ফিট পেতে পারেন তবে মডেলটির কোনও ভবিষ্যদ্বাণীপূর্ণ শক্তি থাকবে না এবং পয়েন্টগুলির মাধ্যমে সেরা ফিটের লাইন আঁকানো ব্যতীত অন্য কোনও কিছুর জন্য অকেজো হবে।
— গ্রেগ

11
আপনি কেন ব্যবহার করছেন raw = T? অসংরক্ষিত ভেরিয়েবল ব্যবহার করা ভাল।
— হ্যাডলি

4
আমি একই ফলাফল পেতে এটি করেছি lm(y ~ x + I(x^2) + I(x^3))। সম্ভবত অনুকূল নয়, কেবল একই প্রান্তে দুটি উপায় প্রদান করা।
— গ্রেগ

46

কোন মডেলটি "সেরা ফিটিং মডেল" আপনার "সেরা" বলতে যা বোঝায় তার উপর নির্ভর করে। আর এর কাছে সহায়তার জন্য সরঞ্জাম রয়েছে তবে তাদের মধ্যে চয়ন করার জন্য আপনাকে "সেরা" জন্য সংজ্ঞা প্রদান করতে হবে। নিম্নলিখিত উদাহরণস্বরূপ ডেটা এবং কোড বিবেচনা করুন:

x <- 1:10
y <- x + c(-0.5,0.5)

plot(x,y, xlim=c(0,11), ylim=c(-1,12))

fit1 <- lm( y~offset(x) -1 )
fit2 <- lm( y~x )
fit3 <- lm( y~poly(x,3) )
fit4 <- lm( y~poly(x,9) )
library(splines)
fit5 <- lm( y~ns(x, 3) )
fit6 <- lm( y~ns(x, 9) )

fit7 <- lm( y ~ x + cos(x*pi) )

xx <- seq(0,11, length.out=250)
lines(xx, predict(fit1, data.frame(x=xx)), col='blue')
lines(xx, predict(fit2, data.frame(x=xx)), col='green')
lines(xx, predict(fit3, data.frame(x=xx)), col='red')
lines(xx, predict(fit4, data.frame(x=xx)), col='purple')
lines(xx, predict(fit5, data.frame(x=xx)), col='orange')
lines(xx, predict(fit6, data.frame(x=xx)), col='grey')
lines(xx, predict(fit7, data.frame(x=xx)), col='black')

এই মডেলগুলির মধ্যে কোনটি সেরা? তাদের কারও পক্ষে যুক্তি দেওয়া যেতে পারে (তবে আমি একজনের জন্য বেগুনি রঙটি দ্রবণের জন্য ব্যবহার করতে চাই না)।


15

'আমাকে সেরা ফিটিং মডেল খুঁজতে সাহায্য করতে পারে' প্রশ্নটি সম্পর্কে, সম্ভবত এটি করার জন্য একটি ফাংশন রয়েছে, ধরে নিলে আপনি পরীক্ষার জন্য মডেলগুলির সেটটি বর্ণনা করতে পারেন তবে এটি এন -1 এর সেটটির জন্য একটি ভাল প্রথম পদ্ধতির হবে ডিগ্রি বহুবচন:

polyfit <- function(i) x <- AIC(lm(y~poly(x,i)))
as.integer(optimize(polyfit,interval = c(1,length(x)-1))$minimum)

মন্তব্য

  • এই পদ্ধতির বৈধতা আপনার উদ্দেশ্য উপর নির্ভর করবে, এর অনুমানের optimize()এবং AIC()যদি এআইসি নির্ণায়ক যা আপনি ব্যবহার করতে চান,

  • polyfit()একক ন্যূনতম নাও থাকতে পারে। এটির মতো কিছু দিয়ে এটি পরীক্ষা করুন:

    for (i in 2:length(x)-1) print(polyfit(i))
    
  • আমি as.integer()ফাংশনটি ব্যবহার করেছি কারণ এটি আমার কাছে পরিষ্কার নয় যে আমি কীভাবে একটি পূর্ণসংখ্যার বহুপদী ব্যাখ্যা করব।

  • গাণিতিক সমীকরণের একটি নির্বিচার সেট পরীক্ষা করার জন্য, অ্যান্ড্রু গেলম্যান দ্বারা পর্যালোচিত 'ইউরেকা' প্রোগ্রামটি এখানে বিবেচনা করুন

হালনাগাদ

stepAICমডেল নির্বাচন স্বয়ংক্রিয় করতে ফাংশন (এমএএসএস প্যাকেজে )ও দেখুন।


আমি কীভাবে আর এর সাথে ইউরেকা ইন্টারফেস করতে পারি?
— adam.888

@ অ্যাডাম ৮৮৮ দুর্দান্ত প্রশ্ন - আমি উত্তরটি জানি না তবে আপনি এটি আলাদাভাবে পোস্ট করতে পারেন। শেষ পয়েন্টটি কিছুটা ডিগ্রেশন হয়েছিল।
— ডেভিড লেবাউর

দ্রষ্টব্য: এআইসি হ'ল আকাইকে তথ্য মাপদণ্ড , যা একটি নিবিড় ফিটকে পুরস্কৃত করে এবং বিভিন্ন মডেলকে সর্বোত্তম হিসাবে দেখানো হয়েছে এমনভাবে একটি মডেলের বৃহত সংখ্যক পরামিতিগুলিকে শাস্তি দেয়। en.wikedia.org/wiki/Akaike_information_criterion
— এভেজেনি সার্জিভ

4

আর-তে সেরা ফিট খুঁজে পাওয়ার সহজতম উপায় হ'ল মডেলটিকে কোড করা:

lm.1 <- lm(y ~ x + I(x^2) + I(x^3) + I(x^4) + ...)

স্টেপ ডাউন এআইসি রিগ্রেশন ব্যবহার করার পরে

lm.s <- step(lm.1)

6
ব্যবহার I(x^2)ইত্যাদি ব্যবহারের জন্য ফিটিংয়ের জন্য যথাযথ অরথোগোনাল বহুভুজ দেওয়া যায় না।
— ব্রায়ান ডিগস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.