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.
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.
Câu trả lời:
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:
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.
qqline
sẽ có 1 độ dốc và mu chặn.
Giả sử tập dữ liệu của bạn được gọi words
và có một counts
cộ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?'
Không có thử nghiệm nào cho bạn thấy rằng dữ liệu của bạn có 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.
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
kurtosis()
và 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.
Bằng cách sử dụng nortest
gó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 normtest
gói. Xem mô tả tại
https://cran.r-project.org/web/packages/normtest/normtest.pdf
zipfR
gói.