Forum

Nome Utente:
Password:
Riconoscimi automaticamente
 Tutti i Forum
 MolecularLab
 Bioinformatica
 Bonferroni, Wilcoxon e LSD con R
 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi Aggiungi ai Preferiti Aggiungi ai Preferiti
Cerca nelle discussioni
I seguenti utenti stanno leggendo questo Forum Qui c'è:

Aggiungi Tag Aggiungi i tag

Quanto è utile/interessante questa discussione:

Autore Discussione  

TodosLogos
Nuovo Arrivato



6 Messaggi

Inserito il - 08 novembre 2008 : 11:44:14  Mostra Profilo  Visita l'Homepage di TodosLogos Invia a TodosLogos un Messaggio Privato  Rispondi Quotando
Salve a tutti ragazzi!
questo è il mio primo post, ma è da tanto che leggo questo forum, e ho trovato discussioni davvero di alto livello, per cui vi faccio tutti i miei complimenti!

Ho però bisogno di un piccolo aiuto. Sto studiando un pò di biostatistica, e per mio "diletto" sto provando ad imparare ad usare il software free di statistica R. Ma ho qualche dubbio.

1) Dalla teoria che ho studiato, se ho più serie di dati e voglio confrontarle, procedo con un Anova. Se l'Anova mi dice che esistono almeno due medie per cui i dati sono differenti, procedo con due test, il test LSD e il test di Bonferroni.

1.a) Esiste la funzione per calcolare LSD in R? non sono riusto a trovarla, e difatti mi sono creato una mia funzione per calcolare l'LSD e poi confrontarlo con la differenza delle medie.

1.b) Un altro modo per confrontare le medie a due a due è il test di Bonferroni. Scelgo due gruppi, e calcolo l'intervallo di confidenza per la differenza delle medie, scegliendo dalle tavole il valore di t per (1 - alpha / 2m), dove m è il numero di intervalli di confidenza che devo effettuare in totale. Se l'intervallo di confidenza comprendo lo Zero, allora concludo che i due gruppi hanno medie uguali, altrimenti vuol dire che i due gruppi hanno medie differenti. In R come procedo? ho visto che c'è una funzione p.adjust="Bonferroni", ma non so come usarlo.

2) test non parametrico con Wilcoxon per campioni indipendenti ed appaiati. La funzione test.wilcox() cosa mi dà come risultato? come leggo quel valore di W che mi dà il programma, e come giungo alla mia conclusione?

Mi scuso per il post chilometrico, e le molte domande. Spero che qualcuno di voi trovi il tempo per rispondermi. Grazie mille

chick80
Moderatore

DNA

Città: Edinburgh


11491 Messaggi

Inserito il - 08 novembre 2008 : 15:28:22  Mostra Profilo  Visita l'Homepage di chick80 Invia a chick80 un Messaggio Privato  Rispondi Quotando
Ciao! Innanzitutto ti consiglio questi libri:

Statistics Using R with Biological Examples
Practical Regression and ANOVA Using R

Entrambi i PDF sono scaricabili gratuitamente su CRAN.
----

1) Non ti so aiutare su Bonferroni e LSD, ma il secondo libro che ti ho linkato potrebbe essere utile a riguardo

2) wilcox.test ti restituisce già la p
Ad es. misuri il numero di UFC di un batterio in assenza o presenza di un antibiotico e hai:

senza: 150, 180, 196, 125, 210
con: 30, 32, 57, 22, 11, 18

In R:

> ctrl = c(150, 180, 196, 125, 210)
> antib = c(30, 32, 57, 22, 11, 18)
> w = wilcox.test(ctrl, antib)
> w

Wilcoxon rank sum test

data: ctrl and antib
W = 30, p-value = 0.004329
alternative hypothesis: true location shift is not equal to 0

Se proprio volessi trovare la p dal valore di W, esistono tabelle che puoi trovare su un qualsiasi libro di statistica con i valori di W e le corrispondenti p a seconda del numero di osservazioni.

--

Ti ricordo inoltre che esistono anche altri test post-hoc, come ad es. il test di Tukey (funzione TukeyHSD in R)

Sei un nuovo arrivato?
Leggi il regolamento del forum e presentati qui

My photo portfolio (now on G+!)
Torna all'inizio della Pagina

TodosLogos
Nuovo Arrivato



6 Messaggi

Inserito il - 08 novembre 2008 : 16:57:46  Mostra Profilo  Visita l'Homepage di TodosLogos Invia a TodosLogos un Messaggio Privato  Rispondi Quotando
grazie Chick80 per la risposta.
Per LSD e Bonferroni continuerò a usare i miei algoritmi creati ad hoc, perchè non sono riuscito a trovare una risposta sui tuoi link (comunque utilissimi!).

Per quanto riguarda invece Wilcoxon, io sono abituato a procedere così. Riprendo i tuoi dati, metto in ordine i valori, assegno i ranghi e ottengo:
- Sommatoria dei ranghi del gruppo ctrl = 21
- Sommatoria dei ranghi del gruppo antib = 45

Vado sulle tavole di Wilcoxon per campioni indipendenti, e l'intervallo tabulato per due gruppi con 5 e 6 campioni e per alpha=0.05 è (18, 42). Poichè i valori da me trovati si trovano l'uno fuori e l'altro dentro l'intervallo tabulato, teoricamente non potrei prendere alcuna decisione statistica.

Come leggo una simile risposta in R? p-value non rappresenta l'area della coda?
E quel W com'è calcolato? Probabilmente ho qualche lacuna nella teoria, mi sa, forse per questo mi sfugge la conclusione leggendo l'output di R.

Ti ringrazio ancora per la risposta e il fastidio che ti prendi per rispondermi :)
Torna all'inizio della Pagina

chick80
Moderatore

DNA

Città: Edinburgh


11491 Messaggi

Inserito il - 08 novembre 2008 : 17:40:30  Mostra Profilo  Visita l'Homepage di chick80 Invia a chick80 un Messaggio Privato  Rispondi Quotando
Prendi questa risposta con le pinze perchè non ne sono sicurissimo... probabilmente la cosa si risolve usando il parametro alternative che specifica l'ipotesi alternativa e può essere "greater", "less" o "two.sided"
Di default è two.sided e quindi considera sia un aumento che una diminuzione

Nel nostro caso se diamo:

wilcox.test(ctrl, trattati, alternative="greater")

otteniamo p=0.002165, giustamente più piccola di quella two.sided

Diciamo che nell'esempio dell'antibiotico è ragionevole fare un'ipotesi di diminuzione, probabilmente in altri casi l'opzione two.sided è più corretta.

Ad ogni modo nell'help (che puoi vedere scrivendo ?wilcox.test oppure help(wilcox.test) puoi trovare più info.

Per quanto riguarda il modo in cui R effettua il calcolo queste frasi tratte dall'help potrebbero essere utile

Citazione:
Performs one and two sample Wilcoxon tests on vectors of data; the latter is also known as 'Mann-Whitney' test.


L'esempio dell'antibiotico è a 2 sample, perchè abbiamo 2 differenti gruppi di cellule e non stiamo misurando la risposta 2 volte sullo stesso gruppo, quindi equivale al test di Mann-Whitney.

Citazione:

By default (if 'exact' is not specified), an exact p-value is computed if the samples contain less than 50 finite values and there are no ties. Otherwise, a normal approximation is used.

...
...

The literature is not unanimous about the definitions of the Wilcoxon rank sum and Mann-Whitney tests.
The two most common definitions correspond to the sum of the ranks of the first sample with the minimum value subtracted or not: R subtracts and S-PLUS does not, giving a value which is larger by m(m+1)/2 for a first sample of size m. (It seems Wilcoxon's original paper used the unadjusted sum of the ranks but subsequent tables subtracted the minimum.)
R's value can also be computed as the number of all pairs '(x[i], y[j])' for which 'y[j]' is not greater than x[i]', the most common definition of the Mann-Whitney test.


Poichè nel mio esempio con valori volutamente "belli" tutti gli x sono più grandi di tutti gli y, avrai 30 coppie x[i], y[j] che soddisfano la condizione, e quindi W=30

Sei un nuovo arrivato?
Leggi il regolamento del forum e presentati qui

My photo portfolio (now on G+!)
Torna all'inizio della Pagina

TodosLogos
Nuovo Arrivato



6 Messaggi

Inserito il - 08 novembre 2008 : 18:05:32  Mostra Profilo  Visita l'Homepage di TodosLogos Invia a TodosLogos un Messaggio Privato  Rispondi Quotando
Chiaro l'algoritmo per trovare il valore di W (mi fido di R, perchè sinceramente è un pò una scocciatura farlo su carta e penna ), che è diverso da quello che ero abituato io ad usare.
Anche se continuo a non capire perchè con il mio algoritmo che ho scritto prima, il risultato non è lampante come usando R, o anche vedendo ad occhio i valori decisamente diminuiti con l'uso dell'antibiotico
Indubbiamente l'ipotesi alternativa (greater o less) è utile se abbiamo dati così evidenti, altrimenti usiamo la two.sided. Ma secondo te è corretto confrontare i valori di p per un wilcox.test eseguito con alternative="less" e per un wilcox.test eseguito con alternative="greater", per decidere se c'è stata una diminuzione o un innalzamento? A logica risponderei di sì... ma non si sa mai.

-------

Ora supponiamo di avere campioni appaiati. Riporto il codice di R:

> x = c(6.5, 7.2, 5.1, 4.0, 8.3, 7.5, 7.0, 4.5, 6.4, 8.0)
> y = c(5.8, 5.8, 4.5, 3.5, 8.4, 5.1, 7.7, 4.2, 5.1, 5.4)
> 
> wilcox.test(x,y,paired=TRUE)

        Wilcoxon signed rank test with continuity correction

data:  x and y 
V = 48.5, p-value = 0.03654
alternative hypothesis: true location shift is not equal to 0 

Warning message:
In wilcox.test.default(x, y, paired = TRUE) :
  impossibile calcolare p-value esatto in presenza di ties


-----

Ora il valore V corrisponde alla somma dei ranghi delle differenze con segno positivo. E perchè mai proprio quello?
Cosa intende per "continuity correction"?
E il valore di p è abbastanza alto da portarmi a rifiutare l'ipotesi nulla?

Grazie per la tua cortesia nel rispondermi. Imparare R da autodidatta non è così semplice come credevo
Torna all'inizio della Pagina

chick80
Moderatore

DNA

Città: Edinburgh


11491 Messaggi

Inserito il - 08 novembre 2008 : 19:08:50  Mostra Profilo  Visita l'Homepage di chick80 Invia a chick80 un Messaggio Privato  Rispondi Quotando
Citazione:
Indubbiamente l'ipotesi alternativa (greater o less) è utile se abbiamo dati così evidenti, altrimenti usiamo la two.sided. Ma secondo te è corretto confrontare i valori di p per un wilcox.test eseguito con alternative="less" e per un wilcox.test eseguito con alternative="greater", per decidere se c'è stata una diminuzione o un innalzamento? A logica risponderei di sì... ma non si sa mai.


Beh, dipende da qual'è la tua ipotesi iniziale. Se la tua domanda è: "il numero di UFC diminuisce?" usi "greater", se la domanda è "il numero di UFC cambia?" usi "two.sided". Non so se sia corretto usare i 2 test separatemente.

Citazione:
Chiaro l'algoritmo per trovare il valore di W (mi fido di R, perchè sinceramente è un pò una scocciatura farlo su carta e penna ), che è diverso da quello che ero abituato io ad usare.


Allora, ho letto un po' a riguardo ed i due metodi sono in realtà lievemente diversi. Quello che fai tu è il test di Wilcoxon-Mann-Whitney o della somma dei ranghi. Quello che fa R è il test U di Mann-Whitney o dell'ordine robusto dei ranghi.

Leggi a riguardo il manuale di statistica del Prof. Soliani (la vecchia edizione del 2005 è free):
http://www.dsa.unipr.it/soliani/soliani.html

In particolare il capitolo IX "metodi non parametrici per due campioni indipendenti" pagg.18-47

Cito da quel capitolo:
Citazione:
Il test U di Mann-Whitney o test dell'ordine robusto dei ranghi deriva dalla proposta di H. B.
Mann e D. R. Whitney di generalizzare il metodo di Wilcoxon (vedi il loro articolo On a test of
whether one of two random variables is stochastically larger than the other, pubblicato su Annals of
Mathematical Statistics, Vol. 18, pp. 50-60).
Il test non richiede alcuna ipotesi sulla simmetria dei due campioni. Può essere applicato quando
essi hanno dimensioni diverse (come d’altronde il test di Wilcoxon nella versione presentata nel
paragrafo precedente) e serve sempre per verificare la significatività della differenza tra le
mediane.

...

A motivo della sua più estesa applicabilità, è preferibile al test di Wilcoxon-Mann-Whitney. Molti
programmi informatici e testi di statistica applicata recenti riportano solo questo test e non
riportano più il precedente, sebbene esso mantenga ancora una relativa diffusione internazionale e la
sua conoscenza sia utile per capire articoli dei decenni scorsi.



Il metodo che mostra (delle precedenze dei ranghi) è lievemente diverso da quello di R, ma dà esattamente lo stesso risultato.

Citazione:
Cosa intende per "continuity correction"?

Una delle condizioni di questo test è che la scala usata sia continua, cioè che non ci siano "ties" (valori uguali nei due campioni). In presenza di ties, tuttavia, si può usare un'approssimazione per calcolare p, utilizzando un
"artificio matematico" che corregge per la mancanza di continuità.
E' spiegato nel manuale di cui sopra (a pg.42 e seguenti)

Citazione:
E il valore di p è abbastanza alto da portarmi a rifiutare l'ipotesi nulla?

Di solito viene considerato "significativo" un valore p<0.05, quindi la risposta è sì. Nota che questa è semplicemente una convenzione, non è che p=0.09 voglia dire che il tuo trattamento non ha avuto effetto. I valori di p vanno sempre interpretati cum grano salis!

Sei un nuovo arrivato?
Leggi il regolamento del forum e presentati qui

My photo portfolio (now on G+!)
Torna all'inizio della Pagina

TodosLogos
Nuovo Arrivato



6 Messaggi

Inserito il - 08 novembre 2008 : 19:57:27  Mostra Profilo  Visita l'Homepage di TodosLogos Invia a TodosLogos un Messaggio Privato  Rispondi Quotando
Citazione:
Beh, dipende da qual'è la tua ipotesi iniziale. Se la tua domanda è: "il numero di UFC diminuisce?" usi "greater", se la domanda è "il numero di UFC cambia?" usi "two.sided". Non so se sia corretto usare i 2 test separatemente.

In effetti la mia domanda non aveva senso. Se dobbiamo scegliere tra 1 e 2, e il programma ci dice che non è 1, non serve controllare che sia 2, a forza quello dev'essere sto sclerando, scusa la domanda!

Citazione:
Allora, ho letto un po' a riguardo ed i due metodi sono in realtà lievemente diversi. Quello che fai tu è il test di Wilcoxon-Mann-Whitney o della somma dei ranghi. Quello che fa R è il test U di Mann-Whitney o dell'ordine robusto dei ranghi.

Ecco risolto il mistero. Io andavo sparato che l'algoritmo usato da R fosse proprio il Wilcoxon-Matt-Whitney (visto che si chiama wilcox.test), e invece è l'altro algoritmo (dove Wilcoxon non compare). Che confusione!

Ad ogni modo ho risolto in questa maniera per il Wilcoxon-Mann-Whitney (per gruppi piccoli, quindi concludendo con il confronto degli intervalli):
dati due gruppi A (n elementi) e B (m-n elementi), calcolo la somma dei ranghi di A, e la somma dei ranghi di B così:

Somma dei ranghi di A:
sum(rank(c(A,B))[1:n])


Somma dei ranghi di B:
sum(rank(c(A,B))[n+1:m])


Dopodichè prendo le tavole, confronto gli intervalli, e giungo alla mia conclusione. Anche se sinceramente trovo più divertente avere la risposta stampata sullo schermo senza dover muovere più un dito, e se scopro da dove spuntano i valori tabulati, creerò un algoritmo completo. Ma per ora non riesco a capire con che criterio siano scelti quegli intervalli (quelli a pag. 22 del capitolo IX, che sono quelli che servono a me), che tra l'altro sono pure diversi dalle tavole che ho su un altro libro!!

La dispensa che mi hai linkato è davvero buona, ti ringrazio anche per questa risorsa. Per ora non ho altre domande, ma mi sa che prima o poi verrò a darti fastidio nuovamente
Torna all'inizio della Pagina

chick80
Moderatore

DNA

Città: Edinburgh


11491 Messaggi

Inserito il - 09 novembre 2008 : 12:59:09  Mostra Profilo  Visita l'Homepage di chick80 Invia a chick80 un Messaggio Privato  Rispondi Quotando
di niente, è stata una buona occasione x leggere qualcosa su questi tests!


Sei un nuovo arrivato?
Leggi il regolamento del forum e presentati qui

My photo portfolio (now on G+!)
Torna all'inizio della Pagina
  Discussione  

Quanto è utile/interessante questa discussione:

 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi Aggiungi ai Preferiti Aggiungi ai Preferiti
Cerca nelle discussioni
Vai a:
MolecularLab.it © 2003-18 MolecularLab.it Torna all'inizio della Pagina