Topic: Quesito statistico sul goodness of fit test  (Letto 976 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Jhaldanack

  • python unicellularis
  • *
  • Post: 19
  • Punti reputazione: 0
    • Mostra profilo
Quesito statistico sul goodness of fit test
« il: Aprile 18, 2016, 16:28 »
Più che un problema legato a python forse è più una questione prettamente statistica, ma magari qualcuno sa consigliarmi.

Vorrei paragonare diverse distribuzioni di cui ho tot valori medi per ogni distribuzione. Fin qui tutto semplice, si può usare Two-sample Kolmogorov-Smirnov Test da Scipy...

Esempio:
import numpy as np
from scipy.stats import ks_2samp

x = np.array([0.08, 0.14, 0.20, 0.54])
y = np.array([0.05, 0.35, 0.53, 0.97])
z = np.array([0.09, 0.37, 0.69, 0.95])
s0, p0 = ks_2samp(x, y)
s1, p1 = ks_2samp(x, z)
s2, p2 = ks_2samp(y, z)
print p0, p1, p2


esce fuori
(0.5344157192165071, 0.5344157192165071, 0.9968756885202118)

il mio problema nasce dal fatto che oltre ai valori medi, quelli inseriti nell'array, vorrei anche inserire la deviazione standard per valutare la qualità del fit.
Esempio per array con array([valori medi] [dev standard]):

x = np.array([[0.08, 0.14, 0.20, 0.54] , [0.01, 0.02, 0.01, 0.02]])
y = np.array([0.05, 0.35, 0.53, 0.97]  , [0.01, 0.02, 0.01, 0.02]])

cosa posso usare per considerare anche la deviazione standard per paragonare due distribuzioni? Idee?

Offline riko

  • python deus
  • *
  • moderatore
  • Post: 7.453
  • Punti reputazione: 12
    • Mostra profilo
    • RiK0 Tech Temple
Re: Quesito statistico sul goodness of fit test
« Risposta #1 il: Aprile 18, 2016, 18:47 »
Secondo me la tua domanda non e' minimamente una domanda di Python.
Come sottolinei all'inizio, il tuo e' un problema prettamente di statistica. Quando hai chiaro il metodo statistico da usare, poi possiamo aiutarti a capire come farlo in Python (meglio se e' preconfezionato in scipy).

Offline riko

  • python deus
  • *
  • moderatore
  • Post: 7.453
  • Punti reputazione: 12
    • Mostra profilo
    • RiK0 Tech Temple
Re: Quesito statistico sul goodness of fit test
« Risposta #2 il: Aprile 19, 2016, 01:40 »
Rileggendo meglio... sono ancora piu' confuso. Vuoi usare KS che puo' comparare un sample a una distribuzione o, come nel tuo caso, due samples.

Ok.. tutto bene. Poi dici "ho tot valori medi per ogni distribuzione". E questo per me non ha nessun senso. Forse la mia statistica non e' abbastanza avanzata... ma in matematica mi sono laureato e una distribuzione ha *un* valore medio. Anche un insieme di sample ha *un* valore medio. Come puoi averne piu' di uno?
Non e' che forse quelli che tu chiami "valori medi" sono quelli che normalmente si chiamano samples (o misurazioni o in mille altri modi, ma *non* valori medi)?

Nel caso in cui usi 2-sample KS, non stai facendo *nessuna* assunzione sul fatto che le popolazioni dovrebbero venire o meno da una distribuzione normale.
E a questo punto si pongono due questioni...

La prima e' che, per quanto so io di statistica, per una distribuzione generica la deviazione standard non necessariamente vuole dire un tubazzo di niente. Cioe', la calcoli, ma non necessariamente ti dice qualcosa. Il che mi farebbe dire che, di fatto, nel tuo caso non serve. Specie perche' 2-sample KS appunto non presuppone normale. Semplicemente confronti due samples.

Il secondo problema e' che in se e per se KS puo' essere usata per i fatti suoi per darti goodness of fit con piccoli ritocchi. Ma per definizione in questo caso la stai comparando con una distribuzione, non con un sample. Quindi *non* fai 2S-KS. E poi ci sono tutti i discorsi se sia un buon metodo o meno per fare questo.

Insomma... non mi tornano un botto di cose in quello che dici.

Offline Jhaldanack

  • python unicellularis
  • *
  • Post: 19
  • Punti reputazione: 0
    • Mostra profilo
Re: Quesito statistico sul goodness of fit test
« Risposta #3 il: Aprile 19, 2016, 10:39 »
La statistica non è propriamente il mio campo quindi mi scuso se il linguaggio può risultare inaccurato e si forse non è un problema legato a python.

Faccio un esempio per spiegare cosa intendo, magari è più chiaro.
Su due campioni fatti da 100 persone in italia e 100 a Paperopoli, vado a misurare quante volte la gente sbatte la testa sul muro per ogni ora e lo misuro per una settimana.
Avrò una funzione che descrive nelle 24 ore quante volte la gente sbatte la testa. Ad esempio alle 8 am il 30% sd 5% sbatte la testa. Ovviamente il dato è la media di misurazione fatte alle 8 durante la settimana.

Ricavo la linea di tendenza del fenomeno in italia a Paperopoli. Per paragonare le due tendenze pensavo di usare la KS, ma la KS non prende in considerazione la ds dei valori.

Offline Legs

  • python unicellularis
  • *
  • Post: 34
  • Punti reputazione: 0
    • Mostra profilo
Re: Quesito statistico sul goodness of fit test
« Risposta #4 il: Aprile 19, 2016, 22:15 »
Potresti provare anche a dare un'occhiata al caro vecchio metodo di confronto della t di student.
Serve principalmente per confrontare due distribuzioni con forma normale. Onestamente non so se possa andare bene per il tuo caso ma un tentativo lo farei. Si mettono a confronto medie e deviazioni standard.

Il modulo SciPy dovrebbe avere tutto quello che ti serve:
http://docs.scipy.org/doc/scipy-0.16.0/reference/generated/scipy.stats.t.html

Offline riko

  • python deus
  • *
  • moderatore
  • Post: 7.453
  • Punti reputazione: 12
    • Mostra profilo
    • RiK0 Tech Temple
Re: Quesito statistico sul goodness of fit test
« Risposta #5 il: Aprile 20, 2016, 12:37 »
La statistica non è propriamente il mio campo quindi mi scuso se il linguaggio può risultare inaccurato e si forse non è un problema legato a python.

Faccio un esempio per spiegare cosa intendo, magari è più chiaro.
Su due campioni fatti da 100 persone in italia e 100 a Paperopoli, vado a misurare quante volte la gente sbatte la testa sul muro per ogni ora e lo misuro per una settimana.
Avrò una funzione che descrive nelle 24 ore quante volte la gente sbatte la testa. Ad esempio alle 8 am il 30% sd 5% sbatte la testa. Ovviamente il dato è la media di misurazione fatte alle 8 durante la settimana.

Ricavo la linea di tendenza del fenomeno in italia a Paperopoli. Per paragonare le due tendenze pensavo di usare la KS, ma la KS non prende in considerazione la ds dei valori.


Guarda, non sto capendo cosa vuoi fare. Dovresti lavorare la parte statistica. Perche', che io sappia, la KS andrebbe bene per dire... ho 100 persone a paperopoli e 100 persone in italia e ho le altezze di sti tizi. Confronto i due sample e concludo che vale la null hypothesis che provengano dalla stessa popolazione (ovvero non ci sono differenze statisticamente significative fra i due) oppure prendo l'ipotesi alternativa secondo la quale le popolazioni sono distinte. Questo 2-sample KS dovrebbe farlo (piu' o meno bene). In questo senso non ti interessa la deviazione standard come cosa "separata" (in qualche modo e' gia' parte del confronto). Poi magari ci sono modi migliori di KS, ma e' un altro discorso.

Ma tu vuoi fare magheggi diversi. Tu mi dici... boh. Esattamente quali sono i tuoi samples? da quello che dici vuoi confrontare un singolo datapoint o qualcosa del genere. E secondo me non ti porta a nulla di buono. Tra l'altro quando dici "goodness of fit" confondi tutto. Goodness of fit e' quando hai una serie di data point e ti chiedi se questi sono descritti da una certa funzione (ovvero quanto bene sono descritti -- quanto e' l'errore se vuoi). Quindi la tua ipotesi e' che quei datapoint sono tratti (o meno) da una certa distribuzione. Che io sappia non ha senso parlare di goodness of fit fra due sample, ma fra un sample e un modello.

Offline caronte

  • python erectus
  • ***
  • Post: 225
  • Punti reputazione: 0
    • Mostra profilo
Re: Quesito statistico sul goodness of fit test
« Risposta #6 il: Aprile 20, 2016, 13:38 »
vero...

 come ti hanno già detto il test che vuoi fare tu andrebbe anche bene e della SD non te ne fregherebbe niente;
poi se assumi che i residuals siano approssimativamente --normali-- (o se hai un numero di campioni abbastanza largo)
allora puoi andare di z- test e --iniflargli dentro-- media e varianza;
insomma ci sono diversi test che potresti fare in base sia al tipo di variabile dipendente,
che in questo caso è continua, che anche alle assunzioni che riesci a portare sulla popolazione, magari ne fai piu di uno e li confronti,
non mi sembra un dramma, anzi sarebbe routine..
poi sicuramente python te lo risolve con una chiamata; leggiti la doc di qualche package del caso, bho poi sai tu...
« Ultima modifica: Aprile 20, 2016, 13:52 da caronte »