Ich habe ~ 1 Million Datenpunkte. Hier ist der Link zur Datei data.txt. Jeder von ihnen kann einen Wert zwischen 0 und 145 annehmen. Es handelt sich um einen diskreten Datensatz. Unten ist das Histogramm des Datensatzes. Auf der x-Achse ist die Zählung (0-145) und auf der y-Achse ist die Dichte.
Datenquelle : Ich habe ungefähr 20 Referenzobjekte und 1 Million zufällige Objekte im Raum. Für jedes dieser 1 Million zufälligen Objekte habe ich die Manhattan-Entfernung in Bezug auf diese 20 Referenzobjekte berechnet. Ich habe jedoch nur die kürzeste Entfernung zwischen diesen 20 Referenzobjekten berücksichtigt. Ich habe also 1 Million Manhattan-Entfernungen (die Sie im Link zur Datei finden, der in der Post angegeben ist).
Ich habe versucht, die Poisson- und die negative Binomialverteilung mit R an diesen Datensatz anzupassen. Ich fand die Anpassung, die sich aus den negativen Binomialverteilungen ergibt, vernünftig. Unten ist die angepasste Kurve (in blau).
Endziel : Sobald ich diese Verteilung angemessen angepasst habe, möchte ich diese Verteilung als zufällige Verteilung der Entfernungen betrachten. Wenn ich das nächste Mal den Abstand (d) eines Objekts zu diesen 20 Referenzobjekten berechne, sollte ich wissen können, ob (d) signifikant oder nur ein Teil der Zufallsverteilung ist.
Um die Güte der Anpassung zu bewerten, berechnete ich den Chi-Quadrat-Test unter Verwendung von R mit den beobachteten Häufigkeiten und Wahrscheinlichkeiten, die ich aus der negativen Binomialanpassung erhalten habe. Obwohl die blaue Kurve gut zur Verteilung passt, ist der P-Wert, der aus dem Chi-Quadrat-Test zurückkehrt, extrem niedrig.
Das hat mich ein bisschen verwirrt. Ich habe zwei verwandte Fragen:
Ist die Wahl der negativen Binomialverteilung für diesen Datensatz angemessen?
Wenn der P-Wert des Chi-Quadrat-Tests so niedrig ist, sollte ich eine andere Verteilung in Betracht ziehen?
Unten ist der vollständige Code, den ich verwendet habe:
# 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)