আমার একটি ছত্রভঙ্গ প্লট আছে আমি কীভাবে নন-লিনিয়ার ট্রেন্ড লাইন যুক্ত করতে পারি?
আমার একটি ছত্রভঙ্গ প্লট আছে আমি কীভাবে নন-লিনিয়ার ট্রেন্ড লাইন যুক্ত করতে পারি?
উত্তর:
আসুন কিছু ডেটা তৈরি করা যাক।
এন <- 100 x <- সিক (এন) y <- rnorm (n, 50 + 30 * x ^ (- 0.2), 1) ডেটা <- data.frame (x, y)
নিম্নলিখিতটি আপনাকে কীভাবে একটি লোয়েস লাইন বা একটি অ-লিনিয়ার রিগ্রেশন ফিট করতে পারে তা দেখায়।
প্লট (y ~ x, ডেটা) # একটি লোয়েস লাইনে ফিট করুন লয়েস_ফিট <- লয়েস (y ~ x, ডেটা) লাইনগুলি (ডেটা $ x, পূর্বাভাস (লোস_ফিট), কল = "নীল") # একটি অ-লিনিয়ার রিগ্রেশন ফিট করুন nls_fit <- nls (y ~ a + b * x ^ (- সি), ডেটা, শুরু = তালিকা (a = 80, খ = 20, সি = 0.2%) লাইনগুলি (ডেটা $ x, পূর্বাভাস (এনএলএস_ফিট), কল = "লাল")
আপনি যদি ggplot2
(তৃতীয় প্লটিং সিস্টেমটি আর তে, বেস আর এবং ল্যাটিসের পরে) ব্যবহার করেন তবে এটি হয়ে যায়:
library(ggplot2)
ggplot(Data, aes(x,y)) + geom_point() + geom_smooth()
আপনি কীভাবে ডেটা স্মুটেড চয়ন করতে পারেন: ?stat_smooth
বিশদ এবং উদাহরণের জন্য দেখুন।
stat_smooth
টাইপ করে আর সাহায্যের ফাইলটি অ্যাক্সেস করে আপনি নিজেই এটি জানতে পেরেছিলেন ?stat_smooth
। :-)
আপনি যা সন্ধান করছেন ঠিক তা না জেনে lattice
প্যাকেজটি ব্যবহার করে আপনি সহজেই একটি লোয়েস বক্ররেখা যুক্ত করতে পারেন type="smooth"
; যেমন,
> library(lattice)
> x <- rnorm(100)
> y <- rnorm(100)
> xyplot(y ~ x, type=c("smooth", "p"))
help("panel.loess")
পরিবর্তনের জন্য লো-ফিটিং রুটিনে যেতে পারে এমন যুক্তিগুলির জন্য দেখুন , উদাহরণস্বরূপ, ব্যবহারের জন্য বহুপক্ষের ডিগ্রি।
হালনাগাদ
লোয়েসের বক্ররেখার রঙ পরিবর্তন করতে, আপনি একটি ছোট ফাংশন লিখতে এবং এটি panel
প্যারামিটার হিসাবে পাস করতে পারেন xyplot
:
x <- rnorm(100)
y <- rnorm(100)
panel_fn <- function(x, y, ...)
{
panel.xyplot(x, y, ...)
panel.xyplot(x, y, type="smooth", col="red", ...)
}
xyplot(y ~ x, panel=panel_fn)
আপনার প্রশ্নটি কিছুটা অস্পষ্ট, তাই আপনার সমস্যাটি কী তা নিয়ে আমি কিছুটা অনুমান করাচ্ছি। আপনি যদি একটি স্ক্যাটারপ্লট স্থাপন করতে পারেন এবং ডেটাটিকে কিছুটা বর্ণনা করতে পারেন তবে এটি অনেক সাহায্য করবে। দয়া করে, আমি যদি খারাপ অনুমান করে থাকি তবে আমার উত্তরটি উপেক্ষা করুন।
প্রথমত, এটি সম্ভব যে আপনার ডেটা এমন কিছু প্রক্রিয়া বর্ণনা করেছে যা আপনি যুক্তিসঙ্গতভাবে বিশ্বাস করেন যে অ-রৈখিক। উদাহরণস্বরূপ, আপনি যদি গাড়ীটির গতি বনাম হঠাৎ ব্রেকিং থামিয়ে গাড়িটির দূরত্বের প্রতিরোধের চেষ্টা করছেন, পদার্থবিজ্ঞান আমাদের বলবে যে গাড়ির শক্তি বেগের বর্গক্ষেত্রের সমানুপাতিক - বেগ নয় নিজেই। সুতরাং আপনি সম্ভবত এক্ষেত্রে বহুপদী রিগ্রেশন চেষ্টা করতে চাইতে পারেন এবং (আরে) আপনি এর মতো কিছু করতে পারেন model <- lm(d ~ poly(v,2),data=dataset)
। রিগ্রেশন মডেলটিতে বিভিন্ন অ-লিনিয়ারিটি কীভাবে পাবেন সে সম্পর্কে অনেকগুলি ডকুমেন্টেশন রয়েছে।
অন্যদিকে, যদি আপনি একটি লাইন পেয়ে থাকেন যা "দোলা দিয়ে" থাকে এবং আপনি কেন জানেন যে এটি কেন দোলা দিয়ে থাকে তবে একটি ভাল সূচনা পয়েন্ট সম্ভবত স্থানীয়ভাবে ওজনযুক্ত রিগ্রেশন হতে পারে, বা loess
আর এ This অঞ্চল, পুরো ডেটাসেটের বিপরীতে। একটি "কে নিকটতম-প্রতিবেশী" সংস্করণটি কল্পনা করা সবচেয়ে সহজ, যেখানে যে কোনও বিন্দুতে কার্ভের মান গণনা করতে, আপনি আগ্রহের পয়েন্টের নিকটবর্তী কে পয়েন্টগুলি খুঁজে পেতে পারেন এবং এগুলি গড় করেন। লয়স ঠিক এর মতো তবে স্ট্রেট গড়ের পরিবর্তে রিগ্রেশন ব্যবহার করে। এর জন্য ব্যবহার করুন model <- loess(y ~ x, data=dataset, span=...)
, যেখানে span
ভেরিয়েবল স্মুথিংয়ের ডিগ্রি নিয়ন্ত্রণ করে।
তৃতীয় দিকে (হাতছাড়া হয়ে) - আপনি প্রবণতা সম্পর্কে কথা বলছেন? এটি কি অস্থায়ী সমস্যা? যদি তা হয় তবে ট্রেন্ড লাইনের ব্যাখ্যা এবং পরিসংখ্যানিক তাত্পর্যকে নিয়ে একটু সতর্ক হন। টাইম সিরিজের ট্রেন্ডগুলি "অটোরিগ্রেসিভ" প্রসেসগুলিতে উপস্থিত হতে পারে এবং এই প্রক্রিয়াগুলির জন্য প্রক্রিয়াটির এলোমেলো ঘটনা মাঝে মধ্যে এলোমেলো গোলমাল থেকে প্রবণতা তৈরি করতে পারে এবং ভুল পরিসংখ্যানগত তাত্পর্য পরীক্ষা আপনাকে বলতে পারে এটি তাৎপর্যপূর্ণ নয়!
স্ক্যাটার প্লটের নমুনা পয়েন্ট এবং একই গ্রাফের উপর মসৃণ বক্ররেখা স্থাপন করা:
library(graphics)
## Create some x,y sample points falling on hyperbola, but with error:
xSample = seq(0.1, 1.0, 0.1)
ySample = 1.0 / xSample
numPts <- length(xSample)
ySample <- ySample + 0.5 * rnorm(numPts) ## Add some noise
## Create x,y points for smooth hyperbola:
xCurve <- seq(0.1, 1.0, 0.001)
yCurve <- 1.0 / xCurve
plot(xSample, ySample, ylim = c(0.0, 12.0)) ## Plot the sample points
lines(xCurve, yCurve, col = 'green', lty = 1) ## Plot the curve