Tính toán thủ công giá trị P từ giá trị t trong kiểm tra t


49

Tôi có một tập dữ liệu mẫu với 31 giá trị. Tôi đã chạy thử nghiệm t hai đầu bằng R để kiểm tra nếu giá trị trung bình thực bằng 10:

t.test(x=data, mu=10, conf.level=0.95)

Đầu ra:

t = 11.244, df = 30, p-value = 2.786e-12
alternative hypothesis: true mean is not equal to 10 
95 percent confidence interval:
 19.18980 23.26907 
sample estimates:
mean of x 
 21.22944 

Bây giờ tôi đang cố gắng làm điều tương tự bằng tay:

t.value = (mean(data) - 10) / (sd(data) / sqrt(length(data))) 
p.value = dt(t.value, df=length(lengths-1))

Giá trị t được tính bằng phương pháp này giống như đầu ra của hàm t-test R. Giá trị p, tuy nhiên, đi ra là 3.025804e-12.

Có ai biết tôi đang làm gì sai không?

Cảm ơn!

BIÊN TẬP

Đây là mã R đầy đủ, bao gồm cả tập dữ liệu của tôi:

# Raw dataset -- 32 observations
data = c(21.75, 18.0875, 18.75, 23.5, 14.125, 16.75, 11.125, 11.125, 14.875, 15.5, 20.875,
            17.125, 19.075, 25.125, 27.75, 29.825, 17.825, 28.375, 22.625, 28.75, 27, 12.825, 
            26, 32.825, 25.375, 24.825, 25.825, 15.625, 26.825, 24.625, 26.625, 19.625)

# Student t-Test
t.test(x=data, mu=10, conf.level=0.95)

# Manually calculate p-value
t.value = (mean(data) - 10) / (sd(data) / sqrt(length(data)))
p.value = dt(t.value, df=length(data) - 1)

Câu trả lời:


43

Sử dụng ptvà làm cho nó hai đuôi.

> 2*pt(11.244, 30, lower=FALSE)
[1] 2.785806e-12

1
Tôi nghĩ có một chi tiết bị thiếu: Khi nào nên sử dụng thấp hơn = F? - Xin vui lòng xem câu hỏi của tôi ở đây: stats.stackexchange.com/questions/133091/NH
vonjd

3
Giá trị cần phải dương, vì vậy nếu sử dụng giá trị này với một biến có thể âm, hãy bọc lại abs.
Aaron - Tái lập Monica

3
Đối với thử nghiệm hai đuôi, bạn đang tìm kiếm xác suất giá trị nhỏ hơn -11.244 hoặc hơn +11.244. thấp hơn = F yêu cầu R tính toán xác suất của giá trị lớn hơn tham số đầu tiên. Mặt khác, nó cung cấp cho bạn xác suất của giá trị nhỏ hơn tham số đầu tiên. Như vậy, bạn cũng có thể thực hiện 2 * pt (-11.244, 30). Cá nhân, tôi thường làm 2 * pt (-abs (q), df = n-1) khi R mặc định là thấp hơn = T.
tro

9

Tôi đã đăng bài này dưới dạng bình luận nhưng khi tôi muốn thêm một chút chỉnh sửa, nó trở nên quá dài nên tôi đã chuyển nó xuống đây.

Chỉnh sửa : Thống kê kiểm tra của bạn và df là chính xác. Câu trả lời khác lưu ý vấn đề với việc tính toán vùng đuôi trong cuộc gọi đến pt()và nhân đôi cho hai đuôi, giúp giải quyết sự khác biệt của bạn. Tuy nhiên, tôi sẽ rời khỏi cuộc thảo luận / nhận xét trước đó của mình vì nó làm cho các điểm liên quan nói chung hơn về giá trị p ở các đuôi cực lớn:

Có thể bạn không làm gì sai và vẫn nhận được sự khác biệt, nhưng nếu bạn đăng một ví dụ có thể lặp lại, có thể điều tra thêm xem bạn có lỗi gì không (giả sử trong df).

Những điều này được tính toán từ các xấp xỉ có thể không đặc biệt chính xác trong phần đuôi cực kỳ.

Nếu hai điều không sử dụng các xấp xỉ giống hệt nhau, chúng có thể không đồng ý chặt chẽ, nhưng việc thiếu thỏa thuận đó không thành vấn đề (đối với vùng đuôi chính xác đến mức đó là con số có ý nghĩa, các giả định bắt buộc sẽ phải giữ ở mức độ đáng kinh ngạc sự chính xác). Bạn có thực sự có sự bình thường chính xác, độc lập chính xác, phương sai chính xác không đổi?

2×10123×10120.0001


7

Cách tốt nhất để tính toán thủ công là:

t.value = (mean(data) - 10) / (sd(data) / sqrt(length(data))) 
p.value = 2*pt(-abs(t.value), df=length(data)-1)

1


0

Tôi thực sự thích câu trả lời @Aaron cung cấp, cùng với các absbình luận. Tôi tìm thấy một xác nhận tiện dụng là để chạy

pt(1.96, 1000000, lower.tail = F) * 2

mà năng suất 0.04999607.

Ở đây, chúng tôi đang sử dụng một tài sản nổi tiếng rằng 95% diện tích theo phân phối bình thường xảy ra ở ~ 1,96 độ lệch chuẩn, do đó, đầu ra ~ 0,05 cho giá trị p của chúng tôi. Tôi đã sử dụng 1000000 kể từ khi N rất lớn, phân phối t gần giống với phân phối bình thường. Chạy này cho tôi sự thoải mái trong giải pháp của @ Aaron.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.