J'essaie de comprendre la sortie de la fonction de test de Kolmogorov-Smirnov (deux échantillons, deux côtés). Voici un test simple.
x <- c(1,2,2,3,3,3,3,4,5,6)
y <- c(2,3,4,5,5,6,6,6,6,7)
z <- c(12,13,14,15,15,16,16,16,16,17)
ks.test(x,y)
# Two-sample Kolmogorov-Smirnov test
#
#data: x and y
#D = 0.5, p-value = 0.1641
#alternative hypothesis: two-sided
#
#Warning message:
#In ks.test(x, y) : cannot compute exact p-value with ties
ks.test(x,z)
#Two-sample Kolmogorov-Smirnov test
#data: x and z
#D = 1, p-value = 9.08e-05
#alternative hypothesis: two-sided
#
#Warning message:
#In ks.test(x, z) : cannot compute exact p-value with ties
ks.test(x,x)
#Two-sample Kolmogorov-Smirnov test
#data: x and x
#D = 0, p-value = 1
#alternative hypothesis: two-sided
#
#Warning message:
#In ks.test(x, x) : cannot compute exact p-value with ties
Il y a quelques choses que je ne comprends pas ici.
D'après l' aide , il semble que la valeur p se réfère à l'hypothèse
var1=var2
. Cependant, ici, cela signifierait que le test dit (p<0.05
):une. Je ne peux pas dire ça
X = Y
;b. Je peux dire ça
X = Z
;c. Je ne peux pas dire ça
X = X
(!)
En plus d'apparaître que x est différent de lui-même (!), Il est également assez étrange pour moi que x=z
, comme les deux distributions ont un support sans chevauchement. Comment est-ce possible?
Selon la définition du test,
D
devrait être la différence maximale entre les deux distributions de probabilité, mais par exemple dans le cas,(x,y)
elle devrait l'êtreD = Max|P(x)-P(y)| = 4
(dans le cas oùP(x)
,P(y)
ne sont pas normalisées) ouD=0.3
(si elles sont normalisées). Pourquoi D est différent de cela?J'ai intentionnellement fait un exemple avec de nombreux liens , car les données avec lesquelles je travaille ont beaucoup de valeurs identiques. Pourquoi cela confond-il le test? J'ai pensé qu'il calculait une distribution de probabilité qui ne devrait pas être affectée par des valeurs répétées. Une idée?
la source
dgof::ks.test(x,y,simulate.p.value=TRUE, B=1000)
etMatching::ks.boot(x,y, nboots=1000)
( sekhon.berkeley.edu/matching/ks.boot.html ). D et la valeur de p calculée sont absolument identiques dans les deux cas. Cela me fait penser que peut-être KS n'est pas si mal, même quand on a plusieurs liens et que la méthode n'est pas garantie de fonctionner? La raison pour laquelle j'aime KS n'est pas paramétrique, c'est-à-dire que je n'ai pas besoin de supposer une distribution pour les échantillons.D(x,y) = sqrt(100/20)*0.3=0.67
, ce qui est toujours différent.Pour calculer le D (à partir du
ks.test
code):la source