Cách thực hiện kiểm tra bằng R để xem dữ liệu có tuân theo phân phối bình thường không


44

Tôi có một bộ dữ liệu với cấu trúc sau:

a word | number of occurrence of a word in a document | a document id 

Làm cách nào tôi có thể thực hiện kiểm tra phân phối bình thường trong R? Có lẽ đó là một câu hỏi dễ nhưng tôi là người mới chơi R.


5
@Skarab Có thể tôi hoàn toàn tắt, nhưng bạn có nghĩ rằng tần suất của bất kỳ từ nào sẽ tỷ lệ nghịch với thứ hạng của nó trong bảng tần số của từ, theo luật của Zipf ( j.mp/9er2lv ) không? Trong trường hợp này, hãy kiểm tra các zipfRgói.
chl

1
Tôi đồng ý với @chl - sẽ là một phép màu nhỏ nếu dữ liệu của bạn được phân phối bình thường. Có lẽ một câu hỏi khác về những gì bạn muốn làm với dữ liệu sẽ có giá trị. Đừng phát minh lại bánh xe!
csgillespie

3
Làm thế nào dữ liệu của bạn có thể được phân phối theo một mô hình mang lại xác suất khác không cho sự xuất hiện tiêu cực?
user603

1
Lý do để làm bài kiểm tra này là gì?
whuber

Tôi muốn ước tính nếu kết quả rất lớn của Khai thác thông tin là chính xác. Tôi muốn kiểm tra xem sự phân phối của các thực thể được tìm thấy trong văn bản có tuân theo mong đợi của tôi không (tôi biết tên miền và văn bản văn bản).
Skarab

Câu trả lời:


47

Nếu tôi hiểu chính xác câu hỏi của bạn, thì để kiểm tra xem các từ xuất hiện trong một bộ tài liệu có tuân theo phân phối Bình thường hay không, bạn chỉ cần sử dụng thử nghiệm shapiro-Wilk và một số qqplots. Ví dụ,

## Generate two data sets
## First Normal, second from a t-distribution
words1 = rnorm(100); words2 = rt(100, df=3)

## Have a look at the densities
plot(density(words1));plot(density(words2))

## Perform the test
shapiro.test(words1); shapiro.test(words2)

## Plot using a qqplot
qqnorm(words1);qqline(words1, col = 2)
qqnorm(words2);qqline(words2, col = 2)

Các lệnh qqplot đưa ra: văn bản thay thế

Bạn có thể thấy rằng tập dữ liệu thứ hai rõ ràng không bình thường bởi các đuôi nặng ( Thông tin thêm ).

Trong thử nghiệm tính quy tắc Shapiro-Walk, giá trị p là lớn đối với tập dữ liệu đầu tiên (> .9) nhưng rất nhỏ đối với tập dữ liệu thứ hai (<.01). Điều này sẽ dẫn bạn từ chối giả thuyết khống cho lần thứ hai.


7
Tại sao rõ ràng là không bình thường?
Herman Toothrot

Tôi nghĩ rằng các điểm được vẽ nên nằm trên bộ chia góc phần tư I-III càng gần khi chúng vẽ một phân phối bình thường.
Campa

Tổng quát hơn (trung bình! = 0), qqlinesẽ có 1 độ dốc và mu chặn.
Campa

@HermanToothrot nó không bình thường khi nhìn vào cốt truyện thứ hai vì có sự phân kỳ rất lớn trong các giá trị đuôi. Biểu đồ QQ là một biểu đồ của lượng tử lý thuyết (nếu nó là bình thường) câu lượng tử mẫu (từ dữ liệu). Nếu dữ liệu mẫu là bình thường, chúng tôi hy vọng các quan sát sẽ gần với đường thẳng, vì chúng là cho âm mưu đầu tiên. Cũng lưu ý tỷ lệ rất khác nhau trên trục y cho các ô đó.
Sheldon

15

Giả sử tập dữ liệu của bạn được gọi wordsvà có một countscột, bạn có thể vẽ biểu đồ để có một hình dung về phân phối:

hist(words$counts, 100, col="black")

Trong đó 100 là số thùng

Bạn cũng có thể thực hiện một âm mưu QQ bình thường bằng cách sử dụng

qqnorm(words$counts)

Cuối cùng, bạn cũng có thể sử dụng thử nghiệm Shapiro-Wilk cho tính quy tắc

shapiro.test(word$counts)

Mặc dù, hãy nhìn vào cuộc thảo luận này: Kiểm tra tính quy phạm: 'Về cơ bản là vô dụng?'


14

Không có thử nghiệm nào cho bạn thấy rằng dữ liệu của bạn phân phối bình thường - nó sẽ chỉ có thể hiển thị cho bạn khi dữ liệu không phù hợp với mức bình thường mà bạn sẽ từ chối null.

Nhưng số lượng không bình thường trong mọi trường hợp, chúng là số nguyên dương - xác suất mà một quan sát từ phân phối bình thường sẽ lấy giá trị không phải là số nguyên? (... Đó là một sự kiện của xác suất 1).

Tại sao bạn sẽ kiểm tra tính bình thường trong trường hợp này? Rõ ràng là không đúng sự thật.

[Trong một số trường hợp, bạn có thể nói dữ liệu của mình không thực sự bình thường. Dữ liệu thực không bao giờ (hoặc gần như không bao giờ) sẽ thực sự được rút ra từ một phân phối bình thường.]

Nếu bạn thực sự cần làm một bài kiểm tra, bài kiểm tra Shapiro-Wilk ( ?shapiro.test) là một bài kiểm tra tổng quát tốt về tính quy tắc, một bài kiểm tra được sử dụng rộng rãi.


9

Một cách chính thức hơn để xem xét tính bình thường là bằng cách kiểm tra xem độ nhiễu và độ lệch có khác biệt đáng kể so với không.

Để làm điều này, chúng ta cần phải có được:

kurtosis.test <- function (x) {
m4 <- sum((x-mean(x))^4)/length(x)
s4 <- var(x)^2
kurt <- (m4/s4) - 3
sek <- sqrt(24/length(x))
totest <- kurt/sek
pvalue <- pt(totest,(length(x)-1))
pvalue 
}

cho bệnh kurtosis, và:

skew.test <- function (x) {
m3 <- sum((x-mean(x))^3)/length(x)
s3 <- sqrt(var(x))^3
skew <- m3/s3
ses <- sqrt(6/length(x))
totest <- skew/ses
pt(totest,(length(x)-1))
pval <- pt(totest,(length(x)-1))
pval
}

cho Skewness.

Cả hai thử nghiệm này đều có một đầu, vì vậy bạn sẽ cần nhân giá trị p với 2 để trở thành hai đuôi. Nếu giá trị p của bạn trở nên lớn hơn một, bạn sẽ cần sử dụng 1-kurtosis.test () thay vì kurtosis.test.

Nếu bạn có bất kỳ câu hỏi nào khác, bạn có thể gửi email cho tôi tại j.bredman @ gmail


Sự khác biệt của hai chức năng trên, liên quan đến kurtosis()skewness()chức năng từ gói khoảnh khắc là gì? Kết quả sử dụng rnorm()mẫu là khác nhau.
Nikos Alexandris

5

Ngoài thử nghiệm Shapiro-Wilk của gói số liệu thống kê, gói nortest (có sẵn trên CRAN) cung cấp các thử nghiệm quy phạm khác.


4

Bằng cách sử dụng nortestgói R, các thử nghiệm này có thể được tiến hành:

  • Thực hiện kiểm tra tính quy phạm Anderson-Darling

    ad.test(data1)
  • Thực hiện kiểm tra Cramér-von Mises cho tính quy tắc

    cvm.test(data1)
  • Thực hiện kiểm tra chi bình phương Pearson cho tính chuẩn

    pearson.test(data1)
  • Thực hiện kiểm tra Shapiro-Francia cho tính quy tắc

    sf.test(data1)

Nhiều thử nghiệm khác có thể được thực hiện bằng cách sử dụng normtestgói. Xem mô tả tại https://cran.r-project.org/web/packages/normtest/normtest.pdf


@Nick; Tôi đã đề cập đến các thử nghiệm này từ gói 'nortest' được tìm thấy ở đây: ( cran.r-project.org/web/packages/nortest/nortest.pdf ). Gói hữu ích khác là 'Normtest' như đã đề cập ở trên.
Bác sĩ Nisha Arora

Được rồi cảm ơn. Trong sự thiếu hiểu biết của tôi, tôi cho rằng một tên là một lỗi đánh máy.
Nick Cox
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.