ฉันสร้างแบบจำลองที่จะตอบคำอธิบายของ Breiman และพบเฉพาะสิ่งที่ชัดเจน: ผลลัพธ์ขึ้นอยู่กับบริบทและ "ความรุนแรง"
อาจกล่าวได้ว่าน่ากลัวมาก แต่ให้ฉัน จำกัด เพียงตัวอย่างเดียวที่ดำเนินการโดยใช้R
รหัสที่แก้ไขได้ง่ายเพื่อให้ผู้อ่านที่สนใจใช้ในการสืบสวนของตนเอง รหัสนี้เริ่มต้นด้วยการตั้งค่าเมทริกซ์การออกแบบซึ่งประกอบด้วยค่าอิสระที่กระจายกันโดยประมาณที่มีค่ามุมฉากประมาณ (เพื่อที่เราจะไม่ได้รับปัญหาเกี่ยวกับความสัมพันธ์ระหว่างกันหลายค่า) มันคำนวณสมการกำลังสอง (เช่นไม่เป็นเชิงเส้น) ปฏิสัมพันธ์ระหว่างตัวแปรสองตัวแรก: นี่เป็นเพียงหนึ่งในหลาย ๆ ประเภทของ "ความไม่เชิงเส้น" ที่สามารถศึกษาได้ แต่อย่างน้อยก็เป็นเรื่องธรรมดาที่เข้าใจกันดี จากนั้นมันจะทำให้ทุกอย่างเป็นมาตรฐานเพื่อให้สัมประสิทธิ์เทียบเคียงได้:
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
สำหรับโมเดล OLS พื้นฐาน (โดยไม่มีความไม่เชิงเส้น) เราจะต้องระบุค่าสัมประสิทธิ์และค่าเบี่ยงเบนมาตรฐานของข้อผิดพลาดที่เหลือ นี่คือชุดของค่าสัมประสิทธิ์หน่วยและ SD เทียบเคียง:
beta <- rep(c(1,-1), p)[1:p]
sd <- 1
เพื่อแสดงให้เห็นถึงสถานการณ์นี่คือการวนซ้ำของฮาร์ดโค้ดของการจำลอง มันสร้างตัวแปรตาม, สรุปค่าของมัน, แสดงเมทริกซ์สหสัมพันธ์แบบเต็มของตัวแปรทั้งหมด (รวมถึงการมีปฏิสัมพันธ์), และแสดงเมทริกซ์กระจาย จากนั้นจะดำเนินการถดถอย OLS ในต่อไปนี้ค่าสัมประสิทธิ์การโต้ตอบที่จะมีค่าน้อยกว่าค่าสัมประสิทธิ์อื่น ๆ (เท่ากับหรือ ) ดังนั้นจึงยากที่จะเรียกว่า "สุดขีด":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))
แทนที่จะดูผลลัพธ์ทั้งหมดที่นี่ลองดูข้อมูลเหล่านี้โดยใช้ผลลัพธ์ของplot
คำสั่ง:
ร่องรอย lowess บนสามเหลี่ยมแสดงที่ต่ำกว่าหลักความสัมพันธ์เชิงเส้นตรงระหว่างไม่มีปฏิสัมพันธ์ ( x.12
) และตัวแปรตาม ( y
) และความสัมพันธ์เชิงเส้นเจียมเนื้อเจียมตัวระหว่างตัวแปรอื่น ๆ y
และ ผลลัพธ์ของ OLS ยืนยันว่า ปฏิสัมพันธ์มีความสำคัญแทบ:
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 *
ฉันจะใช้ค่า p-value ของเทอมการโต้ตอบเพื่อทดสอบความไม่เชิงเส้น: เมื่อค่า p นี้ต่ำพอ (คุณสามารถเลือกได้ว่าต่ำแค่ไหน) เราจะตรวจพบความไม่เชิงเส้น
(มีความละเอียดอ่อนที่นี่เกี่ยวกับสิ่งที่เรากำลังมองหาในทางปฏิบัติเราอาจจำเป็นต้องตรวจสอบทั้งหมด 7 * 6/2 = 21 ที่เป็นไปได้การโต้ตอบสมการกำลังสองเช่นเดียวกับบางทีอาจจะเป็นคำสองกำลังสองมากกว่าเน้นคำเดียว เราต้องการทำการแก้ไขสำหรับการทดสอบที่เกี่ยวข้องกับ 28 รายการนี้ฉันไม่ได้ทำการแก้ไขอย่างชัดเจนที่นี่เพราะแทนที่จะแสดงการกระจายแบบจำลองของค่า p คุณสามารถอ่านอัตราการตรวจจับได้โดยตรงจาก histograms ที่สิ้นสุดอยู่บนพื้นฐานของเกณฑ์อย่างมีนัยสำคัญ.)
แต่อย่าเพิ่งทำการวิเคราะห์ครั้งนี้ ลองทำหลาย ๆ ครั้งสร้างค่าใหม่ของy
ในแต่ละการวนซ้ำตามโมเดลเดียวกันและเมทริกซ์การออกแบบเดียวกัน ในการทำสิ่งนี้ให้สำเร็จเราใช้ฟังก์ชั่นในการทำซ้ำหนึ่งรอบและส่งคืนค่า p ของคำศัพท์โต้ตอบ:
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]
}
ฉันเลือกที่จะนำเสนอผลการจำลองเป็นฮิสโทแกรมของค่า p โดยแปรผันค่าสัมประสิทธิ์มาตรฐานgamma
ของคำที่ใช้โต้ตอบ ก่อนฮิสโตแกรม:
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
ตอนนี้ไปทำงาน ใช้เวลาสองสามวินาทีสำหรับการทดลอง 1,000 ครั้งต่อการจำลอง (และการจำลองสี่ครั้งโดยเริ่มจากค่าที่กำหนดของคำที่ใช้ในการโต้ตอบและลดลงครึ่งหนึ่งต่อเนื่องทุกครั้ง):
temp <- sapply(2^(-3:0) * gamma, h)
ผลลัพธ์ที่ได้:
อ่านย้อนกลับจากด้านล่างขวา, แปลงเหล่านี้แสดงให้เห็นว่านี้เมทริกซ์การออกแบบx
สำหรับการนี้เบี่ยงเบนมาตรฐานของความผิดพลาดsd
และสำหรับเหล่านี้ค่าสัมประสิทธิ์มาตรฐานbeta
, OLS สามารถตรวจสอบการมีปฏิสัมพันธ์มาตรฐานของ (หนึ่งในสี่เพียงแค่ขนาดของค่าสัมประสิทธิ์อื่น ๆ ) น่าเชื่อถือมากกว่า 80% ของเวลา (ใช้เกณฑ์ 5% สำหรับ p-value - จำการอภิปรายสั้น ๆ เกี่ยวกับการแก้ไขสำหรับการเปรียบเทียบหลายซึ่งตอนนี้ฉันไม่สนใจ); มันสามารถตรวจจับขนาดการโต้ตอบที่ (ประมาณ 20% ของเวลา) บางครั้งมันจะตรวจจับการโต้ตอบขนาด1 / 41 / 81 / 16และไม่สามารถระบุการโต้ตอบที่น้อยลงได้จริงๆ ไม่แสดงที่นี่คือฮิสโตแกรมที่gamma
มีค่าเท่ากับซึ่งแสดงให้เห็นว่าแม้ว่าเมื่อแก้ไขการเปรียบเทียบหลายครั้งแล้วการโต้ตอบแบบสมการกำลังสองที่มีขนาดใหญ่นี้จะถูกตรวจพบอย่างแน่นอน1 / 2
ไม่ว่าคุณจะใช้การโต้ตอบเหล่านี้ซึ่งมีขนาดตั้งแต่ไปจะเป็น "ที่สุด" หรือไม่ได้จะขึ้นอยู่กับมุมมองของคุณเกี่ยวกับสถานการณ์การถดถอย (ตามที่แสดงโดย, และ) อยู่กับจำนวนการทดสอบอิสระ คุณจินตนาการถึงการไม่เคลื่อนไหวและก้าวย่าง Breiman ที่ฉันให้ความเคารพอย่างมากบางทีคุณอาจมีขวานขวานบดหรือเปล่า แน่นอนว่าคุณสามารถทำให้ OLS ตรวจจับความไม่เชิงเส้นได้อย่างง่ายดาย: เพียงทำให้พองตัวเพื่อเพิ่มความไม่เป็นเชิงเส้นและทำการทดสอบต่าง ๆ เพื่อความเหมาะสม1 / 321 / 4x
sd
beta
sd
กล่าวโดยย่อการจำลองสถานการณ์เช่นนี้สามารถพิสูจน์ได้ว่าคุณชอบอะไรถ้าคุณเพิ่งตั้งค่าและตีความอย่างถูกวิธี นั่นแสดงให้เห็นว่านักสถิติแต่ละคนควรดำเนินการสำรวจของตนเองซึ่งเหมาะสมกับปัญหาเฉพาะที่พวกเขาต้องเผชิญเพื่อที่จะเข้าใจความสามารถและจุดอ่อนของกระบวนการที่พวกเขาใช้อย่างลึกซึ้งและเป็นส่วนตัว