Tải gói cần thiết.
library(ggplot2)
library(MASS)
Tạo 10.000 số được trang bị để phân phối gamma.
x <- round(rgamma(100000,shape = 2,rate = 0.2),1)
x <- x[which(x>0)]
Vẽ hàm mật độ xác suất, giả sử chúng ta không biết phân phối x nào phù hợp.
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()
Từ biểu đồ, chúng ta có thể biết rằng phân phối của x khá giống phân phối gamma, vì vậy chúng ta sử dụng fitdistr()
trong gói MASS
để có được các tham số về hình dạng và tốc độ phân phối gamma.
fitdistr(x,"gamma")
## output
## shape rate
## 2.0108224880 0.2011198260
## (0.0083543575) (0.0009483429)
Vẽ điểm thực tế (chấm đen) và biểu đồ được trang bị (đường màu đỏ) trong cùng một ô, và đây là câu hỏi, vui lòng xem sơ đồ trước.
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()
Tôi có hai câu hỏi:
Các tham số thực là
shape=2
,rate=0.2
và các tham số tôi sử dụng hàmfitdistr()
để có đượcshape=2.01
,rate=0.20
. Hai biểu đồ này gần giống nhau, nhưng tại sao biểu đồ được trang bị không khớp với điểm thực tế, phải có điều gì đó sai trong biểu đồ được trang bị hoặc cách tôi vẽ biểu đồ được trang bị và các điểm thực tế là hoàn toàn sai, tôi nên làm gì ?Sau khi tôi nhận được các tham số của mô hình tôi thành lập, trong đó cách tôi đánh giá các mô hình, một cái gì đó như RSS (dư tổng vuông) cho mô hình tuyến tính, hoặc p-giá trị
shapiro.test()
,ks.test()
và thử nghiệm khác?
Tôi kém về kiến thức thống kê, bạn có thể vui lòng giúp tôi không?
ps: Tôi đã tìm kiếm trong Google, stackoverflow và CV nhiều lần, nhưng không tìm thấy gì liên quan đến vấn đề này
h <- hist(x, 1000, plot = FALSE); t1 <- data.frame(x = h$mids, y = h$density)
.