ඔබේ ලොක්කා "වඩා පුරෝකථනය" යන්නෙන් අදහස් කරන්නේ කුමක්දැයි මට විශ්වාස නැත. අඩු අගයන් වඩා හොඳ / වඩා පුරෝකථන ආකෘතියක් අදහස් කරන බව බොහෝ අය වැරදියට විශ්වාස කරති . එය අනිවාර්යයෙන්ම සත්ය නොවේ (මෙය කාරණයකි). කෙසේ වෙතත්, පෙර විචල්යයන් දෙකම ස්වාධීනව වර්ග කිරීම මඟින් අඩු අගයක් සහතික කෙරේ . අනෙක් අතට, ආකෘතියක පුරෝකථන නිරවද්යතාව තක්සේරු කළ හැක්කේ එහි ක්රියාවලියම ජනනය කළ නව දත්ත සමඟ සැසඳීමෙනි. මම එය සරල උදාහරණයකින් කරන්නෙමි (කේතනය කර ඇත ). 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"))
ඉහළ වම් බිම් කොටස මුල් දත්ත පෙන්වයි. සහ අතර යම් සම්බන්ධතාවයක් ඇත (එනම්, සහසම්බන්ධය පමණ වේ.) ඉහළ දකුණු බිම් කොටස මඟින් විචල්යයන් දෙකම ස්වාධීනව වර්ග කිරීමෙන් පසුව දත්ත කෙබඳුදැයි පෙන්වයි. සහසම්බන්ධතාවයේ ශක්තිය සැලකිය යුතු ලෙස වැඩි වී ඇති බව ඔබට පහසුවෙන් දැක ගත හැකිය (එය දැන් පමණ වේ ). කෙසේ වෙතත්, පහළ බිම් කැබලි වලදී, මුල් (වර්ගීකරණය නොකළ) දත්ත පිළිබඳව පුහුණු කරන ලද ආකෘතිය සඳහා පුරෝකථන දෝෂ බෙදා හැරීම වඩා බෙහෙවින් සමීප බව අපට පෙනේ . මුල් දත්ත භාවිතා කළ ආකෘතිය සඳහා මධ්යන්ය නිරපේක්ෂ පුරෝකථන දෝෂය වන අතර, වර්ග කළ දත්ත මත පුහුණු කරන ලද ආකෘතිය සඳහා මධ්යන්ය නිරපේක්ෂ පුරෝකථන දෝෂයxy.31.9901.11.98- ආසන්න වශයෙන් දෙගුණයක් විශාලය. ඒ කියන්නේ වර්ග කළ දත්ත ආකෘතියේ අනාවැකි නිවැරදි අගයන්ට වඩා බොහෝ සෙයින් වැඩි ය. පහළ දකුණු චතුරස්රයේ බිම් කොටස තිත් බිම් කොටසකි. එය පුරෝකථන දෝෂය මුල් දත්ත හා වර්ග කළ දත්ත අතර ඇති වෙනස්කම් පෙන්වයි. අනුකරණය කරන ලද සෑම නව නිරීක්ෂණයක් සඳහාම අනුරූප අනාවැකි දෙක සංසන්දනය කිරීමට මෙය ඔබට ඉඩ සලසයි. වම් පැත්තට නිල් තිත් යනු මුල් දත්ත නව අගයට සමීප වූ අවස්ථා වන අතර දකුණට රතු තිත් යනු වර්ග කළ දත්ත වඩා හොඳ අනාවැකි ලබා දුන් අවස්ථා වේ. මුල් දත්ත පිළිබඳව පුහුණු කරන ලද ආකෘතියෙන් වඩාත් නිවැරදි අනාවැකි පළ විය . y68%
වර්ග කිරීම මෙම ගැටළු වලට හේතු වන තරම ඔබේ දත්තවල පවතින රේඛීය සම්බන්ධතාවයේ කාර්යයකි. සහ අතර සහසම්බන්ධය දැනටමත් ක් නම් , වර්ග කිරීම කිසිදු බලපෑමක් ඇති නොකරන අතර එමඟින් අහිතකර නොවේ. අනෙක් අතට, සහසම්බන්ධයxy1.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