Thursday, July 26, 2018

R প্রোগ্রামিং: রিগ্রেশন লাইন আঁকতে

Advertisements

একটি উদাহরণ চিন্তা করি। আমরা দেহের ওজোনের সাথে উচ্চতার সম্পর্ক দেখতে চাই। উচ্চতার উপর ওজোনের (ভর) প্রভাব কতটা সেটা জানতে চাই। ব্যাপারটার যৌক্তিকতা নিয়ে প্রশ্ন তোলা যেতেই পারে। আপাতত আমাদের উদ্দেশ্য রিগ্রেশন লাইন আঁকা বলে সে বিতর্ক তোলা থাকল।

তাহলে শুরুতেই আমরা গ্রাফের মাধ্যমে দুটো চলকের সম্পর্ক দেখব। ধরা যাক আমাদের কাছে নীচের ডেটা আছে।

আরও পড়ুন
R প্রোগ্রামিং: কীভাবে ইনস্টল ও ব্যবহার করবেন?

height = c(176, 154, 138, 196, 132, 176, 181, 169, 150, 175)
bodymass = c(82, 49, 53, 112, 47, 69, 77, 71, 62, 78) 

এবার এ দুটো নিয়ে একটি Scatter plot বা বিক্ষেপণ চিত্র আঁকা যাক।
plot(bodymass, height)

প্লটটিকে চাইলে আরেকটু স্টাইলিশ করে নেওয়া যায়। 
 plot(bodymass, height, pch=19, col="blue", xlab="Body Mass (kg)",
     ylab="Height (cm)", main="Bodymass vs Height")

এগুলোর মধ্যে কোন argument কেন ব্যবহার করা হল জানতে হেল্প সেকশন দেখতে পারেন। 
?plot

এবার আমরা কাঙ্খিত রিগ্রেশন লাইন আঁকব। আপাতত আমরা লিনিয়ার রিগ্রেশন লাইন নিয়ে কাজ করছি। 

আরও পড়ুন

এক্ষেত্রে আমরা ব্যবহার করছি abline() ফাংশন। এ ফাংশনটি দিয়ে প্লটে অনুভূমিক (horizontal) বা উলম্ব (vertical) রেখা টানা হয়। যেমন উপরের প্লটে আমরা এভাবে বিভিন্ন রেখা টেনে বিন্দুগুলোর অবস্থান বুঝতে পারি। 
abline(h=155
abline(v=87))
এখানে h ও v বোঝাচ্ছে যে যথাক্রমে x ও y অক্ষের কোন পয়েন্ট দুটিতে রেখা আঁকা হবে। তবে ফাংশনটির প্রথম দুটি আর্গুমেন্ট হলো a ও b। এগুলো হলো রেখার যথাক্রমে ইন্টারসেপ্ট ও ঢাল। lm(height ~ bodymass) কমান্ডের মাধ্যমে আমরা এই a ও b এর মানই পাব। 
abline(lm(height ~ bodymass))
ব্যস রেখা হয়ে গেল। চাইলে এটাকে কাস্টোমাইজও করতে পারেন। কালার দিতে পারেন। 

আরও পড়ুন

পুনশ্চ: 
যারা বুঝতে চান উপরের রিগ্রেশন রেখা কীভাবে এল। 

উপরের lm(height ~ bodymass) কমান্ড থেকে আমরা নীচের মডেলের মান পাব। 
$$Y=\alpha + \beta X + \epsilon$$
কমান্ডটির ফলাফল: 
Call:
lm(formula = height ~ bodymass)
Coefficients:
(Intercept)     bodymass
    98.0054       0.9528

এখানে $\alpha$ এর পরিমাপকৃত মান (a) 98.0054 আর $\beta$ এর মান (b) 0.9528। এরা হলো যথাক্রমে রিগ্রেশন লাইনের ইন্টারসেপ্ট বা x অক্ষ থেকে কর্তিত অংশ ও রেখার ঢাল। ঢাল মানে হলো x এক একক বাড়লে y কত একক বাড়ে। তার মানে আমাদের মডেলে ভর এক কেজি বাড়ালে উচ্চতা গড়ে ০.৯৫২৮ সেমি. বাড়ে। 

abline(lm(height ~ bodymass)) কমান্ডের মাধ্যমে এই দুটি মানই কাজে লেগেছে। উপরের প্লটের দিকে তাকালে খেয়াল করবেন, রেখাটিকে পেছন দিকে বাড়িয়ে দিলে বিন্দুতে গিয়ে 98.0054 বিন্দুতে গিয়ে x অক্ষকে ছেদ করবে। 

Abdullah Adil Mahmud

লেখকের পরিচয়

আব্দুল্যাহ আদিল মাহমুদ। লেখক ও ডেটা অ্যানালিস্ট। পড়াশোনা ঢাকা বিশ্ববিদ্যালয়ের পরিসংখ্যান বিভাগে। সম্পাদনা করছেন Stat Mania বিশ্ব ডট কম। পাশাপাশি লিখছেন বিজ্ঞানচিন্তা, ব্যাপন পাই জিরো টু ইনফিনিটিসহ বিভিন্ন ম্যাগাজিনে। প্রকাশিত অনূদিত বইঃ অ্যা ব্রিফার হিস্ট্রি অব টাইম । লেখকের এই সাইটের সব লেখা এখানে ফেসবুক, গুগল প্লাস। পারসোনাল ওয়েবসাইট