Comprensione del test di Kolmogorov-Smirnov in R


17

Sto cercando di capire l'output della funzione di test di Kolmogorov-Smirnov (due campioni, due facciate). Ecco un semplice test.

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

Ci sono alcune cose che non capisco qui.

  1. Dal aiuto , sembra che il p-value si riferisce all'ipotesi var1=var2. Tuttavia, qui ciò significherebbe che il test dice ( p<0.05):

    un. Non posso dire questo X = Y;

    b. Posso dire questo X = Z;

    c. Non posso dirloX = X (!)

Oltre a sembrare che x sia diverso da se stesso (!), È anche abbastanza strano per me x=z , dato che le due distribuzioni non hanno supporto sovrapposto. Come è possibile?

  1. Secondo la definizione del test, Ddovrebbe essere la differenza massima tra le due distribuzioni di probabilità, ma ad esempio nel caso in (x,y)cui dovrebbe essere D = Max|P(x)-P(y)| = 4(nel caso in cui P(x), P(y)non siano normalizzati) oD=0.3 (se sono normalizzati). Perché D è diverso da quello?

  2. Ho intenzionalmente fatto un esempio con molti legami , poiché i dati con cui sto lavorando hanno molti valori identici. Perché questo confonde il test? Ho pensato che calcolasse una distribuzione di probabilità che non dovrebbe essere influenzata da valori ripetuti. Qualche idea?

Risposte:


21

Il test KS si basa sul test dell '"uguaglianza" di due campioni indipendenti da una distribuzione continua (come indicato nella pagina di aiuto). In tal caso, la probabilità di legami dovrebbe essere sorprendentemente piccola (anche indicata). La statistica del test è la distanza massima tra gli ECDF dei due campioni. Il valore p è la probabilità di vedere una statistica del test alta o superiore a quella osservata se i due campioni sono stati estratti dalla stessa distribuzione. (Non è la "probabilità che var1 = var2". E inoltre, 1-p_value NON è neanche quella probabilità.) Valori p elevati ti dicono non puoirivendicare il supporto statistico per una differenza, ma bassi valori p non sono prova di uguaglianza. Valori p bassi possono verificarsi con campioni di dimensioni ridotte (come prevede l'esempio) o con la presenza di differenze interessanti ma piccole, ad esempio disturbi oscillatori sovrapposti. Se si lavora con situazioni con un numero elevato di vincoli, potrebbe essere necessario utilizzare un test che si adatti meglio alla situazione dei dati.

La mia spiegazione del motivo per cui i legami erano una violazione delle ipotesi non era un'affermazione che i legami invalidavano i risultati. Le proprietà statistiche del test KS in pratica sono relativamente resistenti o robuste al fallimento di tale ipotesi. Il problema principale con il test KS, come vedo, è che è eccessivamente generale e, di conseguenza, è sotto-alimentato per identificare differenze significative di natura interessante. Il test KS è un test molto generale e ha una potenza piuttosto bassa per ipotesi più specifiche.

D'altra parte, vedo anche il test KS (o il test "ancora più potente" di Anderson Darling o Lillefors (sp?)) Usato per testare la "normalità" in situazioni in cui tale test è completamente ingiustificato, come il test per la normalità delle variabili utilizzate come predittori in un modello di regressione prima dell'adattamento. Si potrebbe legittimamente desiderare di essere testare la normalità dei i residui in quanto questo è ciò che si assume nella teoria di modellazione. Anche in questo caso le modeste deviazioni dalla normalità dei residui non mettono in discussione la validità dei risultati. Le persone sarebbero meglio di usare metodi solidi per verificare l'impatto importante della "non normalità" sulle conclusioni sul significato statistico.

Forse dovresti consultare uno statistico locale? Potrebbe aiutarti a definire la domanda statistica in modo un po 'più preciso e quindi avere maggiori possibilità di identificare una differenza se ne esiste effettivamente una. Ciò sarebbe evitare un "errore di tipo II": non riuscire a sostenere una conclusione di differenza quando tale differenza è presente.



Ho testato gli stessi esempi sia con dgof::ks.test(x,y,simulate.p.value=TRUE, B=1000)che Matching::ks.boot(x,y, nboots=1000)( sekhon.berkeley.edu/matching/ks.boot.html ). Sia D che il valore p calcolato sono assolutamente identici in entrambi i casi. Questo mi fa pensare che forse KS non è così male, anche quando si hanno diversi legami e il metodo non è garantito per funzionare? Il motivo per cui mi piace KS è che non è parametrico, cioè non ho bisogno di assumere una distribuzione per i campioni.
Nonancourt,

Tuttavia, non riesco ancora a dare un senso ai valori di D. Pensavo che potesse essere un prefattore come sqrt (m * n / (m + n)) come qui , ma ciò avrebbe senso D(x,y) = sqrt(100/20)*0.3=0.67, il che è ancora diverso.
Nonancourt,

3

Per calcolare la D (dal ks.testcodice):

ks.test(x,y)

    Two-sample Kolmogorov-Smirnov test

data:  x and y
D = 0.5, p-value = 0.1641
alternative hypothesis: two-sided

alternative <- "two.sided"
x <- x[!is.na(x)]
n <- length(x)
  y <- y[!is.na(y)]
  n.x <- as.double(n)
  n.y <- length(y)
  w <- c(x, y)
  z <- cumsum(ifelse(order(w) <= n.x, 1/n.x, -1/n.y))
  z <- z[c(which(diff(sort(w)) != 0), n.x + n.y)] #exclude ties
  STATISTIC <- switch(alternative, two.sided = max(abs(z)), 
                      greater = max(z), less = -min(z))
  STATISTIC

[1] 0.5
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.