ฉันมีชุดข้อมูลที่มีโครงสร้างต่อไปนี้:
a word | number of occurrence of a word in a document | a document id
ฉันจะทำการทดสอบสำหรับการแจกแจงแบบปกติใน R ได้อย่างไร? อาจเป็นคำถามง่าย ๆ แต่ฉันเป็นมือใหม่ R
ฉันมีชุดข้อมูลที่มีโครงสร้างต่อไปนี้:
a word | number of occurrence of a word in a document | a document id
ฉันจะทำการทดสอบสำหรับการแจกแจงแบบปกติใน R ได้อย่างไร? อาจเป็นคำถามง่าย ๆ แต่ฉันเป็นมือใหม่ R
คำตอบ:
ถ้าฉันเข้าใจคำถามของคุณถูกต้องแล้วเพื่อทดสอบว่าคำที่เกิดขึ้นในชุดเอกสารเป็นไปตามการแจกแจงแบบปกติคุณสามารถใช้การทดสอบ shapiro-Wilk และ qqplots ได้บ้าง ตัวอย่างเช่น,
## 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)
คำสั่ง qqplot ให้:
คุณจะเห็นว่าชุดข้อมูลที่สองไม่ชัดเจนว่าเป็นปกติโดยก้อยหนัก ( ข้อมูลเพิ่มเติม )
ในการทดสอบภาวะปกติของ Shapiro-Walk ค่า p มีขนาดใหญ่สำหรับชุดข้อมูลชุดแรก (> .9) แต่มีขนาดเล็กมากสำหรับชุดข้อมูลชุดที่สอง (<.01) สิ่งนี้จะนำคุณไปสู่การปฏิเสธสมมติฐานว่างสำหรับวินาที
qqline
จะต้องมีการสกัดกั้น1 ความชันและmu
สมมติว่าชุดข้อมูลของคุณถูกเรียกwords
และมีcounts
คอลัมน์คุณสามารถพล็อตฮิสโตแกรมเพื่อให้เห็นภาพของการแจกแจง:
hist(words$counts, 100, col="black")
โดยที่ 100 คือจำนวนของช่องเก็บ
คุณสามารถทำพล็อต QQ ปกติโดยใช้
qqnorm(words$counts)
ในที่สุดคุณสามารถใช้การทดสอบ Shapiro-Wilk เพื่อความปกติ
shapiro.test(word$counts)
แม้ว่าให้ดูที่การสนทนานี้: การทดสอบตามปกติ: 'ไร้ประโยชน์เป็นหลัก?'
ไม่มีการทดสอบจะแสดงให้คุณเห็นว่าข้อมูลของคุณมีการแจกแจงแบบปกติ - มันจะสามารถแสดงให้คุณเห็นได้เมื่อข้อมูลนั้นไม่สอดคล้องกับปกติที่คุณจะปฏิเสธการเป็นโมฆะ
แต่การนับไม่ปกติในกรณีใด ๆ พวกเขาเป็นจำนวนเต็มบวก - ความน่าจะเป็นที่การสังเกตจากการแจกแจงแบบปกติจะใช้ค่าที่ไม่ใช่จำนวนเต็มคืออะไร (... นั่นเป็นเหตุการณ์ที่น่าจะเป็น 1)
ทำไมคุณต้องทดสอบความเป็นปกติในกรณีนี้ เห็นได้ชัดว่าไม่จริง
[ในบางกรณีอาจไม่จำเป็นว่าคุณสามารถบอกได้ว่าข้อมูลของคุณไม่ปกติ ข้อมูลจริงจะไม่ถูกดึงออกมาจากการแจกแจงแบบปกติ
หากคุณจำเป็นต้องทำการทดสอบจริง ๆ การทดสอบชาปิโร - วิลค์ ( ?shapiro.test
) เป็นการทดสอบทั่วไปที่ดีเกี่ยวกับกฎเกณฑ์ทั่วไปที่ใช้กันอย่างแพร่หลาย
วิธีที่เป็นทางการมากขึ้นในการดูบรรทัดฐานคือการทดสอบว่าความโด่งและความเบ้แตกต่างจากศูนย์อย่างมีนัยสำคัญหรือไม่
ในการทำเช่นนี้เราจำเป็นต้องได้รับ:
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
}
สำหรับ kurtosis และ:
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
}
สำหรับความเบ้
การทดสอบทั้งสองนี้เป็นแบบทางด้านเดียวดังนั้นคุณจะต้องคูณค่า p ด้วย 2 เพื่อให้เป็นแบบสองด้าน หากค่า p ของคุณมากกว่าหนึ่งคุณจะต้องใช้ 1-kurtosis.test () แทน kurtosis.test
หากคุณมีคำถามอื่น ๆ คุณสามารถส่งอีเมลฉันที่ j.bredman@gmail.com
kurtosis()
และskewness()
ฟังก์ชั่นจากแพ็คเกจช่วงเวลาคืออะไร? ผลลัพธ์ที่ใช้rnorm()
ตัวอย่างแตกต่างกัน
นอกจากการทดสอบ Shapiro-Wilk ของแพ็คเกจสถิติแล้วแพ็คเกจ nortest (มีให้ใน CRAN) ยังมีการทดสอบตามปกติอื่น ๆ
โดยใช้nortest
แพ็คเกจของ R การทดสอบเหล่านี้สามารถทำได้:
ดำเนินการทดสอบความเป็นบรรทัดฐานของ Anderson-Darling
ad.test(data1)
ทำการทดสอบCramér-von Mises เพื่อความเป็นมาตรฐาน
cvm.test(data1)
ดำเนินการทดสอบ Chi-Square ของ Pearson เพื่อความปกติ
pearson.test(data1)
ทำการทดสอบ Shapiro-Francia เพื่อความปกติ
sf.test(data1)
การทดสอบอื่น ๆ สามารถทำได้โดยใช้normtest
แพ็คเกจ ดูคำอธิบายได้ที่
https://cran.r-project.org/web/packages/normtest/normtest.pdf
zipfR
แพ็คเกจ