Tôi không chắc ông chủ của bạn nghĩ "dự đoán nhiều hơn" nghĩa là gì. Nhiều người tin sai rằng giá trị thấp hơn có nghĩa là một mô hình dự đoán tốt hơn / tốt hơn. Điều đó không nhất thiết đúng (đây là một trường hợp điển hình). Tuy nhiên, việc sắp xếp độc lập cả hai biến trước sẽ đảm bảo giá trị p thấp hơn . Mặt khác, chúng ta có thể đánh giá độ chính xác dự đoán của một mô hình bằng cách so sánh các dự đoán của nó với dữ liệu mới được tạo ra bởi cùng một quy trình. Tôi làm điều đó dưới đây trong một ví dụ đơn giản (mã hóa ). 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"))
Biểu đồ phía trên bên trái hiển thị dữ liệu gốc. Có một số mối quan hệ giữa và y (viz., Tương quan là khoảng .31 .) Biểu đồ phía trên bên phải cho thấy dữ liệu trông như thế nào sau khi sắp xếp độc lập cả hai biến. Bạn có thể dễ dàng thấy rằng sức mạnh của mối tương quan đã tăng đáng kể (bây giờ là khoảng 0,99 ). Tuy nhiên, ở các ô thấp hơn, chúng tôi thấy rằng việc phân phối các lỗi dự đoán gần với 0 hơn cho mô hình được đào tạo trên dữ liệu gốc (chưa được sắp xếp). Lỗi dự báo tuyệt đối trung bình cho mô hình sử dụng dữ liệu gốc là 1.1 , trong khi đó lỗi dự đoán tuyệt đối trung bình cho mô hình được đào tạo trên dữ liệu được sắp xếp là 1,98xy.31.9901.11.98Lớn gấp hai lần lớn. Điều đó có nghĩa là các dự đoán của mô hình dữ liệu được sắp xếp nằm xa hơn các giá trị chính xác. Biểu đồ trong góc phần tư phía dưới bên phải là một dấu chấm. Nó hiển thị sự khác biệt giữa lỗi dự đoán với dữ liệu gốc và với dữ liệu được sắp xếp. Điều này cho phép bạn so sánh hai dự đoán tương ứng cho mỗi quan sát mới được mô phỏng. Các chấm màu xanh ở bên trái là thời gian khi dữ liệu gốc gần với giá trị mới và các chấm đỏ ở bên phải là thời gian khi dữ liệu được sắp xếp mang lại dự đoán tốt hơn. Có nhiều dự đoán chính xác hơn từ mô hình được đào tạo trên dữ liệu gốc 68 % thời gian. y68%
Mức độ sắp xếp sẽ gây ra những vấn đề này là một chức năng của mối quan hệ tuyến tính tồn tại trong dữ liệu của bạn. Nếu tương quan giữa và y là 1.0 , việc sắp xếp sẽ không có hiệu lực và do đó không gây bất lợi. Mặt khác, nếu tương quan là - 1.0xy1.0−1.0, việc sắp xếp sẽ đảo ngược hoàn toàn mối quan hệ, làm cho mô hình càng không chính xác càng tốt. Nếu dữ liệu ban đầu hoàn toàn không tương thích, việc sắp xếp sẽ có tác động trung gian nhưng vẫn khá lớn, gây ảnh hưởng xấu đến độ chính xác dự đoán của mô hình kết quả. Vì bạn đề cập rằng dữ liệu của bạn thường tương quan với nhau, tôi nghi ngờ rằng đã cung cấp một số bảo vệ chống lại tác hại nội tại của quy trình này. Tuy nhiên, sắp xếp đầu tiên chắc chắn có hại. Để khám phá những khả năng này, chúng ta chỉ cần chạy lại đoạn mã trên với các giá trị khác nhau cho B1
(sử dụng cùng một hạt giống để tái sản xuất) và kiểm tra đầu ra:
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