Tôi có ~ 1 triệu điểm dữ liệu. Đây là liên kết đến tệp data.txt Mỗi người trong số họ có thể nhận giá trị từ 0 đến 145. Đó là một tập dữ liệu riêng biệt. Dưới đây là biểu đồ của tập dữ liệu. Trên trục x là số đếm (0-145) và trên trục y là mật độ.
nguồn dữ liệu : Tôi có khoảng 20 đối tượng tham chiếu và 1 triệu đối tượng ngẫu nhiên trong không gian. Đối với mỗi 1 triệu đối tượng ngẫu nhiên này, tôi đã tính khoảng cách Manhattan đối với 20 đối tượng tham chiếu này. Tuy nhiên tôi chỉ xem xét khoảng cách ngắn nhất trong số 20 đối tượng tham chiếu này. Vì vậy, tôi có 1 triệu khoảng cách Manhattan (mà bạn có thể tìm thấy trong liên kết đến tệp được đưa ra trong bài)
Tôi đã cố gắng khớp các phân phối nhị thức Poisson và phủ định cho tập dữ liệu này bằng R. Tôi thấy sự phù hợp do phân phối nhị thức âm có vẻ hợp lý. Dưới đây là đường cong được trang bị (màu xanh lam).
Mục tiêu cuối cùng : Một khi tôi đã trang bị phân phối này một cách thích hợp, tôi muốn coi phân phối này là phân phối ngẫu nhiên khoảng cách. Lần tới khi tôi tính khoảng cách (d) của bất kỳ đối tượng nào với 20 đối tượng tham chiếu này, tôi sẽ có thể biết liệu (d) có ý nghĩa hay chỉ là một phần của phân phối ngẫu nhiên.
Để đánh giá mức độ phù hợp của tôi, tôi đã tính toán kiểm tra bình phương bằng R với tần số và xác suất quan sát được tôi nhận được từ sự phù hợp nhị thức âm. Mặc dù đường cong màu xanh rất phù hợp để phân phối, giá trị P trở lại từ phép thử chi bình phương là cực kỳ thấp.
Điều này khiến tôi bối rối một chút. Tôi có hai câu hỏi liên quan:
Sự lựa chọn phân phối nhị thức âm cho tập dữ liệu này có phù hợp không?
Nếu giá trị P bình phương kiểm tra giá trị P quá thấp, tôi có nên xem xét phân phối khác không?
Dưới đây là mã hoàn chỉnh tôi đã sử dụng:
# read the file containing count data
data <- read.csv("data.txt", header=FALSE)
# plot the histogram
hist(data[[1]], prob=TRUE, breaks=145)
# load library
library(fitdistrplus)
# fit the negative binomial distribution
fit <- fitdist(data[[1]], "nbinom")
# get the fitted densities. mu and size from fit.
fitD <- dnbinom(0:145, size=25.05688, mu=31.56127)
# add fitted line (blue) to histogram
lines(fitD, lwd="3", col="blue")
# Goodness of fit with the chi squared test
# get the frequency table
t <- table(data[[1]])
# convert to dataframe
df <- as.data.frame(t)
# get frequencies
observed_freq <- df$Freq
# perform the chi-squared test
chisq.test(observed_freq, p=fitD)