Tôi đã tạo ra một mô phỏng sẽ trả lời mô tả của Breiman và chỉ tìm thấy điều hiển nhiên: kết quả phụ thuộc vào bối cảnh và vào ý nghĩa của "cực đoan".
Rất nhiều điều có thể nói, nhưng hãy để tôi giới hạn nó chỉ là một ví dụ được thực hiện bằng phương tiện R
mã dễ dàng sửa đổi để người đọc quan tâm sử dụng trong các cuộc điều tra của riêng họ. Mã này bắt đầu bằng cách thiết lập một ma trận thiết kế bao gồm các giá trị độc lập được phân phối đồng đều xấp xỉ trực giao (để chúng ta không gặp phải các vấn đề về đa cộng đồng). Nó tính toán một tương tác bậc hai (tức là phi tuyến) giữa hai biến đầu tiên: đây chỉ là một trong nhiều loại "phi tuyến" có thể được nghiên cứu, nhưng ít nhất nó là một biến phổ biến, được hiểu rõ. Sau đó, nó chuẩn hóa mọi thứ để các hệ số sẽ tương đương nhau:
set.seed(41)
p <- 7 # Dimensions
n <- 2^p # Observations
x <- as.matrix(do.call(expand.grid, lapply(as.list(1:p), function(i) c(-1,1))))
x <- x + runif(n*p, min=-1, max=1)
x <- cbind(x, x.12 = x[,1]*x[,2]) # The nonlinear part
x <- apply(x, 2, function(y) (y - mean(y))/sd(y)) # Standardization
Đối với mô hình OLS cơ sở (không có phi tuyến), chúng ta phải chỉ định một số hệ số và độ lệch chuẩn của sai số dư. Dưới đây là tập hợp các hệ số đơn vị và SD tương đương:
beta <- rep(c(1,-1), p)[1:p]
sd <- 1
1 / 41- 1
gamma = 1/4 # The standardized interaction term
df <- data.frame(x)
df$y <- x %*% c(beta, gamma) + rnorm(n, sd=sd)
summary(df)
cor(df)*100
plot(df, lower.panel=function(x,y) lines(lowess(y~x)),
upper.panel=function(x,y) points(x,y, pch=".", cex=4))
summary(lm(df$y ~ x))
Thay vì lội qua tất cả đầu ra ở đây, chúng ta hãy xem xét các dữ liệu này bằng đầu ra của plot
lệnh:
Các dấu vết thấp trên tam giác dưới cho thấy về cơ bản không có mối quan hệ tuyến tính giữa tương tác ( x.12
) và biến phụ thuộc ( y
) và mối quan hệ tuyến tính khiêm tốn giữa các biến khác và y
. Kết quả OLS xác nhận rằng; sự tương tác hiếm khi có ý nghĩa:
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.0263 0.0828 0.32 0.751
xVar1 0.9947 0.0833 11.94 <2e-16 ***
xVar2 -0.8713 0.0842 -10.35 <2e-16 ***
xVar3 1.0709 0.0836 12.81 <2e-16 ***
xVar4 -1.0007 0.0840 -11.92 <2e-16 ***
xVar5 1.0233 0.0836 12.24 <2e-16 ***
xVar6 -0.9514 0.0835 -11.40 <2e-16 ***
xVar7 1.0482 0.0835 12.56 <2e-16 ***
xx.12 0.1902 0.0836 2.27 0.025 *
Tôi sẽ lấy giá trị p của thuật ngữ tương tác làm thử nghiệm về tính phi tuyến: khi giá trị p này đủ thấp (bạn có thể chọn mức độ thấp), chúng tôi sẽ phát hiện ra độ phi tuyến.
(Có một sự tinh tế ở đây về chính xác những gì chúng ta đang tìm kiếm. Trong thực tế, chúng ta có thể cần kiểm tra tất cả 7 * 6/2 = 21 khả năng tương tác bậc hai như vậy, cũng như có thể là 7 thuật ngữ bậc hai, thay vì tập trung vào một thuật ngữ duy nhất như đã được thực hiện ở đây. Chúng tôi muốn thực hiện chỉnh sửa cho 28 thử nghiệm liên quan đến nhau này. Tôi không thực hiện chỉnh sửa này ở đây, vì thay vào đó tôi hiển thị phân phối mô phỏng của các giá trị p. Bạn có thể đọc tỷ lệ phát hiện trực tiếp từ biểu đồ ở cuối dựa trên ngưỡng ý nghĩa của bạn .)
Nhưng chúng ta đừng làm phân tích này chỉ một lần; hãy thực hiện nhiều lần, tạo ra các giá trị mới y
trong mỗi lần lặp theo cùng một mô hình và cùng một ma trận thiết kế. Để thực hiện điều này, chúng tôi sử dụng một hàm để thực hiện một lần lặp và trả về giá trị p của thuật ngữ tương tác:
test <- function(gamma, sd=1) {
y <- x %*% c(beta, gamma) + rnorm(n, sd=sd)
fit <- summary(lm(y ~ x))
m <- coef(fit)
n <- dim(m)[1]
m[n, 4]
}
Tôi chọn trình bày kết quả mô phỏng dưới dạng biểu đồ của các giá trị p, thay đổi hệ số chuẩn gamma
của thuật ngữ tương tác. Đầu tiên, biểu đồ:
h <- function(g, n.trials=1000) {
hist(replicate(n.trials, test(g, sd)), xlim=c(0,1),
main=toString(g), xlab="x1:x2 p-value")
}
par(mfrow=c(2,2)) # Draw a 2 by 2 panel of results
Bây giờ để làm việc. Phải mất vài giây cho 1000 thử nghiệm trên mỗi mô phỏng (và bốn mô phỏng độc lập, bắt đầu bằng giá trị đã cho của thuật ngữ tương tác và liên tiếp giảm một nửa mỗi lần):
temp <- sapply(2^(-3:0) * gamma, h)
Kết quả:
x
sd
beta
1 / 41 / 81 / 16gamma
1 / 2
1 / 321 / 4x
sd
beta
sd
Nói tóm lại, một mô phỏng như thế này có thể chứng minh bất cứ điều gì bạn thích nếu bạn chỉ cần thiết lập và giải thích nó đúng cách. Điều đó cho thấy các nhà thống kê cá nhân nên tiến hành các cuộc thám hiểm của riêng họ, phù hợp với các vấn đề cụ thể mà họ gặp phải, để hiểu rõ hơn về các khả năng và điểm yếu của các quy trình họ đang sử dụng.