โหลดแพ็คเกจที่จำเป็น
library(ggplot2)
library(MASS)
สร้าง 10,000 หมายเลขที่พอดีกับการแจกแจงแกมม่า
x <- round(rgamma(100000,shape = 2,rate = 0.2),1)
x <- x[which(x>0)]
วาดฟังก์ชันความหนาแน่นของความน่าจะเป็นถ้าเราไม่รู้ว่าการกระจายตัว x พอดีกับอะไร
t1 <- as.data.frame(table(x))
names(t1) <- c("x","y")
t1 <- transform(t1,x=as.numeric(as.character(x)))
t1$y <- t1$y/sum(t1[,2])
ggplot() +
geom_point(data = t1,aes(x = x,y = y)) +
theme_classic()
จากกราฟเราสามารถเรียนรู้ว่าการแจกแจงของ x นั้นเหมือนกับการแจกแจงแกมม่าดังนั้นเราใช้fitdistr()
ในแพ็คเกจMASS
เพื่อรับพารามิเตอร์ของรูปร่างและอัตราการกระจายแกมม่า
fitdistr(x,"gamma")
## output
## shape rate
## 2.0108224880 0.2011198260
## (0.0083543575) (0.0009483429)
วาดจุดจริง (จุดสีดำ) และกราฟที่ติดตั้ง (เส้นสีแดง) ในพล็อตเดียวกันและนี่คือคำถามโปรดดูพล็อตก่อน
ggplot() +
geom_point(data = t1,aes(x = x,y = y)) +
geom_line(aes(x=t1[,1],y=dgamma(t1[,1],2,0.2)),color="red") +
theme_classic()
ฉันมีสองคำถาม:
พารามิเตอร์จริง
shape=2
,rate=0.2
และพารามิเตอร์ที่ผมใช้ฟังก์ชั่นfitdistr()
ที่จะได้รับมี,shape=2.01
rate=0.20
สองตัวนี้เกือบจะเหมือนกัน แต่ทำไมกราฟที่ได้ไม่พอดีกับจุดที่เกิดขึ้นจริงต้องมีบางอย่างผิดปกติในกราฟที่มีการติดตั้งหรือวิธีที่ฉันวาดกราฟที่ถูกประกอบและจุดที่เกิดขึ้นจริงนั้นผิดฉันควรทำอย่างไร ?หลังจากที่ผมได้รับพารามิเตอร์ของรูปแบบที่ผมสร้างซึ่งในทางที่ฉันประเมินรูปแบบบางอย่างเช่น RSS (เหลือตารางรวม) สำหรับรูปแบบเชิงเส้นหรือ p-value ของ
shapiro.test()
,ks.test()
และการทดสอบอื่น ๆ ?
ฉันยากจนในความรู้ทางสถิติคุณช่วยฉันออกได้ไหม
ps: ฉันมีการค้นหาใน Google, stackoverflow และ CV หลายครั้ง แต่ไม่พบสิ่งใดที่เกี่ยวข้องกับปัญหานี้
h <- hist(x, 1000, plot = FALSE); t1 <- data.frame(x = h$mids, y = h$density)
วิธีง่ายๆในการคำนวณคือ