मुझे यकीन नहीं है कि आपके बॉस को "अधिक पूर्वानुमान" का क्या मतलब है। कई लोग गलत तरीके से मानते हैं कि कम वैल्यू का मतलब एक बेहतर / अधिक पूर्वानुमान मॉडल है। यह जरूरी नहीं है कि सच है (यह एक मामला है)। हालांकि, स्वतंत्र रूप से दोनों चर पहले से छँटाई एक कम की गारंटी देगा -value। दूसरी ओर, हम एक मॉडल की भविष्यवाणिय सटीकता का आकलन कर सकते हैं, इसकी भविष्यवाणियों की तुलना नए डेटा से करते हैं जो उसी प्रक्रिया से उत्पन्न हुए थे। मैं इसे एक साधारण उदाहरण में (नीचे कोडित ) करता हूं । पीपीपीR
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"))
ऊपरी बाएं प्लॉट मूल डेटा दिखाता है। और बीच कुछ संबंध है (अर्थात; सहसंबंध लगभग ।) ऊपरी दाहिने भूखंड से पता चलता है कि दोनों चर को स्वतंत्र रूप से छाँटने के बाद डेटा कैसा दिखता है। आप आसानी से देख सकते हैं कि सहसंबंध की ताकत में काफी वृद्धि हुई है (यह अब के बारे में है )। हालांकि, निचले भूखंडों में, हम देखते हैं कि मूल (अनसोल्ड) डेटा पर प्रशिक्षित मॉडल के लिए अनुमानित त्रुटियों का वितरण करीब है । मूल डेटा का उपयोग करने वाले मॉडल के लिए औसत निरपेक्ष भविष्यवाणी त्रुटि , जबकि क्रमबद्ध डेटा पर प्रशिक्षित मॉडल के लिए औसत निरपेक्ष त्रुटिy .31 .99 0 1.1 1.98 y 68 %एक्सy0.31.9901.11.98-सबसे बड़ा दो बार। इसका मतलब है कि सॉर्ट किए गए डेटा मॉडल की भविष्यवाणियां सही मूल्यों से बहुत आगे हैं। निचले दाएं चतुर्थांश में स्थित प्लॉट एक डॉट प्लॉट है। यह मूल डेटा के साथ और सॉर्ट किए गए डेटा के साथ अनुमानित त्रुटि के बीच के अंतर को प्रदर्शित करता है। यह आपको प्रत्येक नए अवलोकन के लिए दो संगत भविष्यवाणियों की तुलना करने की अनुमति देता है। बाईं ओर ब्लू डॉट्स ऐसे समय होते हैं जब मूल डेटा नए -value के करीब थे , और दाईं ओर लाल डॉट्स ऐसे समय होते हैं जब सॉर्ट किए गए डेटा से बेहतर भविष्यवाणियां होती हैं। समय के मूल डेटा पर प्रशिक्षित मॉडल से अधिक सटीक पूर्वानुमान थे । 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