Patronunun "daha akıllı" ne anlama geldiğini düşündüğünden emin değilim. Birçok insan yanlış olarak düşük değerlerinin daha iyi / daha öngörülü bir model olduğu anlamına gelir. Bu mutlaka doğru değil (bu bir noktaya işaret ediyor). Bununla birlikte, her iki değişkeni bağımsız olarak önceden sıralamak, daha düşük bir değeri garanti eder . Öte yandan, tahminlerini aynı işlem tarafından oluşturulan yeni verilerle karşılaştırarak bir modelin tahmin doğruluğunu değerlendirebiliriz. Bunu basit bir örnekte yapıyorum (kodlu ). pppR
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"))
Sol üstteki grafik orijinal verileri gösterir. ve arasında bir ilişki var (viz., Korelasyon yaklaşık .). Sağ üstteki grafik, her iki değişkeni bağımsız olarak sıraladıktan sonra verilerin nasıl göründüğünü gösterir. Korelasyonun gücünün önemli ölçüde arttığını kolayca görebilirsiniz (şimdi yaklaşık ). Bununla birlikte, alt kısımlarda , orijinal (sıralanmamış) verilerde eğitilen model için tahmin hatalarının dağılımının daha yakın olduğunu görüyoruz . Orjinal verileri kullanan model için ortalama mutlak tahmin hatası , sıralanan veriler üzerinde eğitilen model için ortalama mutlak tahmin hatasıy .31 .99 0 1.1 1.98 y 68 %xy0,31.9901.11.98- sadece iki kat daha büyük. Bu, sıralanmış veri modelinin tahminlerinin doğru değerlerden çok daha uzakta olduğu anlamına gelir. Sağ alt kadranda yer alan çizim bir nokta çizimdir. Orijinal verilerle ve sıralanmış verilerle öngörü hatası arasındaki farkları görüntüler. Bu, benzetilen her yeni gözlem için karşılık gelen iki öngörüyü karşılaştırmanıza olanak sağlar. Soldaki mavi noktalar, orijinal verilerin yeni değerine daha yakın olduğu zamanlar ve sağdaki kırmızı noktalar, sıralanan verilerin daha iyi tahminler verdiği zamanlardır. Orijinal verilerde eğitilen modelden , zamanın in üzerinde daha kesin tahminler vardı . y% 68
Sıralama işleminin bu sorunlara ne derece neden olacağı, verilerinizde bulunan doğrusal ilişkinin bir işlevidir. Eğer ve arasındaki korelasyon zaten ise , sınıflamanın etkisi olmaz ve bu nedenle zararlı olmaz. Öte yandan, korelasyony 1,0 - 1,0xy1.0- 1.0sıralama, ilişkiyi tamamen tersine çevirir ve modeli mümkün olduğunca yanlış yapar. Veriler orijinal olarak tamamen ilişkilendirilmemiş olsaydı, sıralama, ortaya çıkan modelin öngörücü doğruluğu üzerinde orta düzeyde ama yine de oldukça büyük, zararlı bir etkiye sahip olurdu. Verilerinizin tipik olarak ilişkili olduğunu belirttiğinizden, bu prosedürün kendine özgü zararlarına karşı bir koruma sağladığından şüpheleniyorum. Bununla birlikte, ilk önce sıralama kesinlikle zararlıdır. Bu olasılıkları araştırmak için, yukarıdaki kodu basitçe farklı değerler ile yeniden çalıştırabiliriz B1
(tekrarlanabilirlik için aynı tohumu kullanarak) ve çıktıyı inceleyebiliriz:
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