2015-04-10 9 views
8

Quindi ho liste di galleggianti. Come [1.33,2.555,3.2134,4.123123] ecc. Queste liste sono frequenze medie di qualcosa. Come posso provare che due liste sono diverse? Ho pensato di calcolare il valore di p. C'è una funzione per farlo? Ho esaminato la documentazione scipy, ma non riuscivo a capire cosa usare.Come calcolare il valore p per due elenchi di float?

Qualcuno può consigliare per favore?

+0

Vuoi dire un [t-test] (https://en.wikipedia.org/wiki/Student%27s_t-test)? Sì, esiste una funzione in ['scipy'] (http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html) – CoryKramer

+0

Oh, grazie per avermi indirizzato nella giusta direzione . Ne proverei uno di questi. – YKY

+0

Non sono sicuro che il valore p sia quello che stai cercando. Non solo t-test, vari altri come [scipy.stats.spearmanr] (http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.spearmanr.html), [scipy.stats.mannwhitneyu ] (http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mannwhitneyu.html) fornisce anche il valore di p. Quindi, è più simile: quando si esegue un test di ipotesi in statistica, un valore p consente di determinare il significato dei risultati. – Zero

risposta

16

Diciamo che si dispone di un elenco di carri allegorici in questo modo:

>>> data = { 
...  'a': [0.9, 1.0, 1.1, 1.2], 
...  'b': [0.8, 0.9, 1.0, 1.1], 
...  'c': [4.9, 5.0, 5.1, 5.2], 
... } 

Chiaramente, a è molto simile a b, ma entrambi sono diversi da c.

Esistono due tipi di confronti che è possibile effettuare.

  1. Pairwise: è a simile a b? a è simile a c? b è simile a c?
  2. Combinato: Sono a, b e c disegnato dallo stesso gruppo? (Questo è generalmente un better question)

Il primo può essere raggiunto utilizzando indipendente t-tests come segue:

>>> from itertools import combinations 
>>> from scipy.stats import ttest_ind 
>>> for list1, list2 in combinations(data.keys(), 2): 
...  t, p = ttest_ind(data[list1], data[list2]) 
...  print list1, list2, p 
... 
a c 9.45895002589e-09 
a b 0.315333596201 
c b 8.15963804843e-09 

Questo fornisce i valori p rilevanti, ed implica che tale a e c sono diverso, b e c sono diversi, ma a e potrebbero essere simili.

Quest'ultimo può essere ottenuto usando l'one-way ANOVA come segue:

>>> from scipy.stats import f_oneway 
>>> t, p = f_oneway(*data.values()) 
>>> p 
7.959305946160327e-12 

Il p-valore indica che a, b e c è improbabile che siano dalla stessa popolazione.

+0

Grazie per il vostro tempo per scomporlo. Ho fatto qualche lettura e sembra che io debba usare la funzione scipy.stats.chi2_contingency, dal momento che sto confrontando i valori medi di due popolazioni indipendenti. È corretto? – YKY

+1

No @YKY - useresti il ​​test chi2 per verificare se i * conteggi di frequenza * di un set di dati dipendono. Se i valori dell'array sono 'float's invece di' int's, sicuramente non vuoi 'chi2_contingency'.Vuoi 'ttest_ind' –

+0

Grazie. Ci proverò. Inoltre, perché chi2 non funzionerà con i float? – YKY