หากต้องการดูว่าค่า p ใดที่ถูกต้อง (ถ้ามี) ให้ลองทำการคำนวณซ้ำสำหรับข้อมูลจำลองที่สมมุติฐานว่างเป็นจริง ในการตั้งค่าปัจจุบันการคำนวณเป็นข้อมูลที่น้อยที่สุดที่เหมาะสมกับ (x, y) ข้อมูลและสมมติฐานว่างคือความชันเป็นศูนย์ ในคำถามนั้นมีค่า x สี่ค่า 1,2,3,4 และข้อผิดพลาดโดยประมาณอยู่ที่ประมาณ 0.7 ดังนั้นมารวมกันในการจำลอง
R
นี่คือการติดตั้งเป็นลายลักษณ์อักษรที่จะเข้าใจให้กับทุกคนแม้ไม่คุ้นเคยกับผู้ที่มี
beta <- c(intercept=0, slope=0)
sigma <- 0.7
x <- 1:4
y.expected <- beta["intercept"] + beta["slope"] * x
การจำลองสร้างข้อผิดพลาดที่เป็นอิสระเพิ่มลงy.expected
ในเรียกใช้lm
เพื่อให้เหมาะสมและsummary
คำนวณค่า p แม้ว่าสิ่งนี้จะไม่มีประสิทธิภาพ แต่ก็เป็นการทดสอบรหัสจริงที่ใช้ เรายังสามารถทำซ้ำได้นับพันในไม่กี่วินาที:
n.sim <- 1e3
set.seed(17)
data.simulated <- matrix(rnorm(n.sim*length(y.expected), y.expected, sigma), ncol=n.sim)
slope.p.value <- function(e) coef(summary(lm(y.expected + e ~ x)))["x", "Pr(>|t|)"]
p.values <- apply(data.simulated, 2, slope.p.value)
ค่า p ที่คำนวณอย่างถูกต้องจะทำหน้าที่เหมือนตัวเลขสุ่มสม่ำเสมอระหว่างถึง101เมื่อสมมติฐานว่างเป็นจริง ฮิสโตแกรมของค่า p เหล่านี้จะช่วยให้เราสามารถตรวจสอบสิ่งนี้ด้วยสายตา - มันมีลักษณะเป็นแนวราบหรือไม่และการทดสอบความเท่าเทียมกันของไคสแควร์จะช่วยให้มีการประเมินที่เป็นทางการมากขึ้น นี่คือฮิสโตแกรม:
h <- hist(p.values, breaks=seq(0, 1, length.out=20))
และสำหรับผู้ที่อาจจินตนาการว่านี่ไม่เหมือนกันนี่คือการทดสอบไคสแควร์:
chisq.test(h$counts)
X-squared = 13.042, df = 18, p-value = 0.7891
ค่า p ขนาดใหญ่ในการทดสอบนี้แสดงผลลัพธ์เหล่านี้สอดคล้องกับความสม่ำเสมอที่คาดหวัง กล่าวอีกอย่างlm
ถูกต้อง
ความแตกต่างของค่า p มาจากไหน? ตรวจสอบสูตรที่น่าจะเป็นไปได้ที่จะเรียกใช้เพื่อคำนวณค่า p ไม่ว่าในกรณีใดสถิติการทดสอบจะเป็น
|t|=∣∣∣∣β^−0se(β^)∣∣∣∣,
เท่ากับความแตกต่างระหว่างค่าสัมประสิทธิ์โดยประมาณและสมมติฐาน (และค่าที่ถูกต้อง)ซึ่งแสดงเป็นข้อผิดพลาดมาตรฐานหลายประการของการประมาณค่าสัมประสิทธิ์ ในคำถามค่าเหล่านี้คือบีตา=0β^β=0
|t|=∣∣∣3.050.87378∣∣∣=3.491
สำหรับการประมาณค่าดักจับและ
|t|=∣∣∣−1.380.31906∣∣∣=4.321
สำหรับการประเมินความชัน โดยทั่วไปสิ่งเหล่านี้จะถูกนำไปเปรียบเทียบกับการแจกแจงของนักเรียนซึ่งพารามิเตอร์องศาอิสระคือ (จำนวนข้อมูล) ลบ (จำนวนสัมประสิทธิ์โดยประมาณ) ลองคำนวณหาจุดตัดกัน:4 2t42
pt(-abs(3.05/0.87378), 4-2) * 2
[1] 0.0732
(คำนวณนี้คูณซ้ายเทลด์นักศึกษาน่าจะเป็นโดยเพราะนี่คือการทดสอบกับสองด้านทางเลือก .) มันเห็นด้วยกับการส่งออก2 H 0 : β = 0 H A : β ≠ 0t2H0:β=0HA:β≠0lm
การคำนวณทางเลือกที่จะใช้การกระจายปกติมาตรฐานที่ใกล้เคียงกับนักศึกษากระจาย มาดูกันว่ามันผลิตอะไร:t
pnorm(-abs(3.05/0.87378)) * 2
[1] 0.000482
แน่นอน: biglm
สมมติว่าการแจกแจงโมฆะของสถิติเป็นค่ามาตรฐานปกติ นี่เป็นข้อผิดพลาดมากแค่ไหน? เรียกใช้การจำลองก่อนหน้านี้โดยใช้แทนการให้ฮิสโตแกรมของค่า p:tbiglm
lm
เกือบ 18% ของค่า p เหล่านี้น้อยกว่าซึ่งเป็นเกณฑ์มาตรฐานของ "นัยสำคัญ" นั่นเป็นข้อผิดพลาดอย่างใหญ่หลวง0.05
บทเรียนบางอย่างที่เราสามารถเรียนรู้จากการสืบสวนเล็ก ๆ นี้คือ
อย่าใช้การประมาณที่มาจากการวิเคราะห์เชิงเส้นกำกับ (เช่นการแจกแจงแบบปกติมาตรฐาน) ด้วยชุดข้อมูลขนาดเล็ก
รู้จักซอฟต์แวร์ของคุณ
pt(-3.491, 2)*2
กับpnorm(-3.491)*2
ตัวอย่างเช่น