আমি নিশ্চিত না যে আপনার বস "আরও ভবিষ্যদ্বাণীপূর্ণ" এর অর্থ কী বলে। অনেক লোক ভুলভাবে বিশ্বাস করে যে লো- মানগুলি একটি আরও ভাল / আরও ভবিষ্যদ্বাণীমূলক মডেল। এটি অগত্যা সত্য নয় (এটি পয়েন্টে কেস হওয়া)। তবে স্বতন্ত্রভাবে উভয় ভেরিয়েবলকে আগেভাগে বাছাই করা কম ভ্যালুয়ের গ্যারান্টি দেবে। অন্যদিকে, আমরা কোনও মডেলের ভবিষ্যদ্বাণীগুলি একই প্রক্রিয়া দ্বারা উত্পন্ন নতুন ডেটার সাথে তুলনা করে ভবিষ্যদ্বাণীমূলক নির্ভুলতার মূল্যায়ন করতে পারি। আমি নীচে এটি একটি সাধারণ উদাহরণে (কোড করে ) দিয়েছি । পিppR
options(digits=3) # for cleaner output
set.seed(9149) # this makes the example exactly reproducible
B1 = .3
N = 50 # 50 data
x = rnorm(N, mean=0, sd=1) # standard normal X
y = 0 + B1*x + rnorm(N, mean=0, sd=1) # cor(x, y) = .31
sx = sort(x) # sorted independently
sy = sort(y)
cor(x,y) # [1] 0.309
cor(sx,sy) # [1] 0.993
model.u = lm(y~x)
model.s = lm(sy~sx)
summary(model.u)$coefficients
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 0.021 0.139 0.151 0.881
# x 0.340 0.151 2.251 0.029 # significant
summary(model.s)$coefficients
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 0.162 0.0168 9.68 7.37e-13
# sx 1.094 0.0183 59.86 9.31e-47 # wildly significant
u.error = vector(length=N) # these will hold the output
s.error = vector(length=N)
for(i in 1:N){
new.x = rnorm(1, mean=0, sd=1) # data generated in exactly the same way
new.y = 0 + B1*x + rnorm(N, mean=0, sd=1)
pred.u = predict(model.u, newdata=data.frame(x=new.x))
pred.s = predict(model.s, newdata=data.frame(x=new.x))
u.error[i] = abs(pred.u-new.y) # these are the absolute values of
s.error[i] = abs(pred.s-new.y) # the predictive errors
}; rm(i, new.x, new.y, pred.u, pred.s)
u.s = u.error-s.error # negative values means the original
# yielded more accurate predictions
mean(u.error) # [1] 1.1
mean(s.error) # [1] 1.98
mean(u.s<0) # [1] 0.68
windows()
layout(matrix(1:4, nrow=2, byrow=TRUE))
plot(x, y, main="Original data")
abline(model.u, col="blue")
plot(sx, sy, main="Sorted data")
abline(model.s, col="red")
h.u = hist(u.error, breaks=10, plot=FALSE)
h.s = hist(s.error, breaks=9, plot=FALSE)
plot(h.u, xlim=c(0,5), ylim=c(0,11), main="Histogram of prediction errors",
xlab="Magnitude of prediction error", col=rgb(0,0,1,1/2))
plot(h.s, col=rgb(1,0,0,1/4), add=TRUE)
legend("topright", legend=c("original","sorted"), pch=15,
col=c(rgb(0,0,1,1/2),rgb(1,0,0,1/4)))
dotchart(u.s, color=ifelse(u.s<0, "blue", "red"), lcolor="white",
main="Difference between predictive errors")
abline(v=0, col="gray")
legend("topright", legend=c("u better", "s better"), pch=1, col=c("blue","red"))
উপরের বাম প্লটটি মূল ডেটা দেখায়। তার মাঝে কিছু সম্পর্ক নেই এবং (যেমন।, পারস্পরিক সম্পর্ক সম্পর্কে ।) উপরের ডান চক্রান্ত দেখায় তথ্য পরে স্বাধীনভাবে উভয় ভেরিয়েবল বাছাই কেমন দেখায় তা। আপনি সহজেই দেখতে পারেন যে পারস্পরিক সম্পর্কের শক্তি যথেষ্ট পরিমাণে বৃদ্ধি পেয়েছে (এটি এখন প্রায় )। তবে, নিম্ন প্লটগুলিতে আমরা দেখতে পাই যে মূল (অরসোর্টড) ডেটা প্রশিক্ষিত মডেলটির জন্য ভবিষ্যদ্বাণীমূলক ত্রুটির বিতরণ কাছাকাছি is মূল ডেটা ব্যবহার করা মডেলটির গড় পরিপূর্ণ ভবিষ্যদ্বাণীমূলক ত্রুটিটি , অন্যদিকে সাজানো ডেটাতে প্রশিক্ষিত মডেলটির গড় পরিপূর্ণ ভবিষ্যদ্বাণীমূলক ত্রুটিটিy .31 .99 0 1.1 1.98 y 68 %এক্সY.31.9901.11.98প্রায় দ্বিগুণ হিসাবে বড়। তার অর্থ, সাজানো ডেটা মডেলের ভবিষ্যদ্বাণীগুলি সঠিক মান থেকে অনেক বেশি further নীচের ডান কোয়াড্রেন্টের প্লটটি একটি বিন্দু প্লট। এটি মূল ডেটা এবং সাজানো ডেটা সহ ভবিষ্যদ্বাণীমূলক ত্রুটির মধ্যে পার্থক্য প্রদর্শন করে। এটি আপনাকে প্রতিটি নতুন পর্যবেক্ষণের অনুকরণের জন্য দুটি অনুরূপ পূর্বাভাস তুলনা করতে দেয়। বামদিকে নীল বিন্দুগুলি এমন সময়গুলি যখন আসল তথ্যগুলি নতুন ভ্যালুয়ের কাছাকাছি থাকে এবং ডানদিকে লাল বিন্দুগুলি এমন সময় হয় যখন সাজানো ডেটা আরও ভাল পূর্বাভাস দেয়। সেই সময়ের আসল ডেটা সম্পর্কে প্রশিক্ষিত মডেল থেকে আরও সঠিক ভবিষ্যদ্বাণী ছিল । Y68 %
যে ডিগ্রিতে বাছাইয়ের ফলে এই সমস্যাগুলি দেখা দেয় তা হ'ল আপনার ডেটাতে বিদ্যমান লিনিয়ার সম্পর্কের একটি কাজ। তাহলে মধ্যে পারস্পরিক এবং ছিল ইতিমধ্যে বাছাই কোনো প্রভাব থাকবে এবং এইভাবে ক্ষতিকারক না। অন্যদিকে, যদি পারস্পরিক সম্পর্ক হয়y 1.0 - 1.0এক্সY1.0- 1.0, বাছাই করা সম্পর্কটিকে পুরোপুরি বিপরীত করবে, মডেলটিকে যতটা সম্ভব অসম্পূর্ণ করে তুলবে। যদি ডেটাটি মূলত সম্পূর্ণরূপে অসম্পৃক্ত থাকে তবে বাছাইয়ের ফলে একটি অন্তর্বর্তী, তবে এখনও বেশ বড়, ফলস্বরূপ মডেলের ভবিষ্যদ্বাণীপূর্ণ নির্ভুলতার উপর ক্ষতিকারক প্রভাব রয়েছে। যেহেতু আপনি উল্লেখ করেছেন যে আপনার ডেটা সাধারণত পারস্পরিক সম্পর্কযুক্ত, তাই আমি সন্দেহ করি যে এই পদ্ধতির অভ্যন্তরীণ ক্ষতির বিরুদ্ধে কিছু সুরক্ষা সরবরাহ করেছে। তবুও, প্রথমে বাছাই করা অবশ্যই ক্ষতিকারক। এই সম্ভাবনাগুলি অন্বেষণ করতে, আমরা কেবলমাত্র B1
(পুনরুত্পাদনযোগ্যতার জন্য একই বীজ ব্যবহার করে) এর জন্য বিভিন্ন মান সহ উপরের কোডটি আবার চালাতে পারি এবং আউটপুট পরীক্ষা করতে পারি:
B1 = -5
:
cor(x,y) # [1] -0.978
summary(model.u)$coefficients[2,4] # [1] 1.6e-34 # (i.e., the p-value)
summary(model.s)$coefficients[2,4] # [1] 1.82e-42
mean(u.error) # [1] 7.27
mean(s.error) # [1] 15.4
mean(u.s<0) # [1] 0.98
B1 = 0
:
cor(x,y) # [1] 0.0385
summary(model.u)$coefficients[2,4] # [1] 0.791
summary(model.s)$coefficients[2,4] # [1] 4.42e-36
mean(u.error) # [1] 0.908
mean(s.error) # [1] 2.12
mean(u.s<0) # [1] 0.82
B1 = 5
:
cor(x,y) # [1] 0.979
summary(model.u)$coefficients[2,4] # [1] 7.62e-35
summary(model.s)$coefficients[2,4] # [1] 3e-49
mean(u.error) # [1] 7.55
mean(s.error) # [1] 6.33
mean(u.s<0) # [1] 0.44