Muat paket yang dibutuhkan.
library(ggplot2)
library(MASS)
Hasilkan 10.000 angka yang pas untuk distribusi gamma.
x <- round(rgamma(100000,shape = 2,rate = 0.2),1)
x <- x[which(x>0)]
Gambarkan fungsi kerapatan probabilitas, seandainya kita tidak tahu distribusi x mana yang cocok.
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()
Dari grafik, kita dapat belajar bahwa distribusi x cukup seperti distribusi gamma, jadi kami gunakan fitdistr()
dalam paket MASS
untuk mendapatkan parameter bentuk dan laju distribusi gamma.
fitdistr(x,"gamma")
## output
## shape rate
## 2.0108224880 0.2011198260
## (0.0083543575) (0.0009483429)
Gambar titik aktual (titik hitam) dan grafik pas (garis merah) di plot yang sama, dan inilah pertanyaannya, silakan lihat plotnya terlebih dahulu.
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()
Saya punya dua pertanyaan:
Parameter nyata
shape=2
,rate=0.2
dan parameter saya menggunakan fungsifitdistr()
untuk mendapatkan yangshape=2.01
,rate=0.20
. Keduanya hampir sama, tetapi mengapa grafik pas tidak cocok dengan titik sebenarnya dengan baik, pasti ada sesuatu yang salah dalam grafik pas, atau cara saya menggambar grafik pas dan poin aktual benar-benar salah, apa yang harus saya lakukan ?Setelah saya mendapatkan parameter dari model yang saya buat, dengan cara apa saya mengevaluasi model, sesuatu seperti RSS (residual square sum) untuk model linier, atau nilai p
shapiro.test()
,ks.test()
dan tes lainnya?
Saya miskin dalam pengetahuan statistik, bisakah Anda membantu saya?
ps: Saya sering mencari di Google, stackoverflow dan CV, tetapi tidak menemukan apa pun yang terkait dengan masalah ini
h <- hist(x, 1000, plot = FALSE); t1 <- data.frame(x = h$mids, y = h$density)
.density
fungsi adalah yang bermanfaat.Jawaban:
pertanyaan 1
Cara Anda menghitung kepadatan dengan tangan tampaknya salah. Tidak perlu membulatkan angka acak dari distribusi gamma. Seperti yang dicatat @Pascal, Anda dapat menggunakan histogram untuk memplot kerapatan poin. Dalam contoh di bawah ini, saya menggunakan fungsi
density
untuk memperkirakan kerapatan dan plot sebagai titik. Saya menyajikan kecocokan dengan poin dan histogram:Inilah solusi yang disediakan @Pascal:
Pertanyaan 2
Untuk menilai kebaikan yang cocok saya sarankan paket
fitdistrplus
. Berikut adalah bagaimana ini dapat digunakan untuk mencocokkan dua distribusi dan membandingkan kesesuaiannya secara grafis dan numerik. Perintah inigofstat
mencetak beberapa langkah, seperti AIC, BIC dan beberapa statistik gof seperti KS-Test dll. Ini terutama digunakan untuk membandingkan kesesuaian distribusi yang berbeda (dalam hal ini gamma versus Weibull). Informasi lebih lanjut dapat ditemukan dalam jawaban saya di sini :@NickCox dengan tepat menyarankan bahwa QQ-Plot (panel kanan atas) adalah grafik tunggal terbaik untuk menilai dan membandingkan kecocokan. Kepadatan yang dipasang sulit untuk dibandingkan. Saya menyertakan grafis lainnya juga demi kelengkapan.
sumber
fitdistrplus
dangofstat
di