{"id":2655,"date":"2023-01-02T10:23:21","date_gmt":"2023-01-02T09:23:21","guid":{"rendered":"https:\/\/www.gironi.it\/blog\/?p=2655"},"modified":"2026-07-18T09:05:22","modified_gmt":"2026-07-18T08:05:22","slug":"il-test-di-wilcoxon","status":"publish","type":"post","link":"https:\/\/www.gironi.it\/blog\/il-test-di-wilcoxon\/","title":{"rendered":"Test non parametrici: il test di Wilcoxon per dati non normali (con esempi R)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Immagina di confrontare la durata delle sessioni tra due gruppi di pagine: quelle con <strong>featured snippet<\/strong> e quelle senza. Prendi i dati, esegui un <strong>test t di Student<\/strong>, e il p-value \u00e8 0,08. Non significativo, apparentemente. Ma guardando i dati, noti che le distribuzioni sono fortemente asimmetriche: poche pagine con durate lunghissime, molte con durate brevissime. Il test t assume la normalit\u00e0 della distribuzione, e qui siamo lontani anni luce.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il <strong>test di Wilcoxon<\/strong> \u00e8 un <strong><a href=\"https:\/\/www.gironi.it\/blog\/test-statistici-parametrici-e-non-parametrici\/\" target=\"_blank\" data-type=\"post\" data-id=\"2306\" rel=\"noreferrer noopener\">test non parametrico<\/a><\/strong> che non richiede alcuna assunzione sulla forma della distribuzione. Lavora sui <strong>ranghi<\/strong>, non sui valori originali: ordina tutti i dati dal pi\u00f9 piccolo al pi\u00f9 grande e assegna un punteggio basato sulla posizione. Questo lo rende particolarmente utile in SEO, dove molti indicatori (sessioni, CTR, posizioni) sono tutto tranne che normali.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">Quando serve Wilcoxon<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I test parametrici come il t-test presuppongono che i dati seguano una <strong>distribuzione normale<\/strong>. In SEO questa assunzione \u00e8 quasi sempre violata:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Le <strong>sessioni<\/strong> per pagina seguono una distribuzione asimmetrica (poche pagine fanno la parte del leone).<\/li>\n<li>Il <strong>CTR<\/strong> \u00e8 concentrato vicino allo zero con una coda lunga verso l&#8217;alto.<\/li>\n<li>Le <strong>posizioni<\/strong> in classifica sono variabili ordinali, non continue.<\/li>\n<li>I <strong>tempi di caricamento<\/strong> hanno una coda destra pesante.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Quando i dati non sono normali, il test t pu\u00f2 dare risultati fuorvianti. Il test di Wilcoxon, basandosi sui ranghi, \u00e8 <strong>robusto<\/strong> a queste violazioni.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Due versioni del test di Wilcoxon<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Il nome &#8220;test di Wilcoxon&#8221; copre in realt\u00e0 due varianti distinte:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Wilcoxon-Mann-Whitney<\/strong> (o test U): per confrontare due campioni indipendenti. \u00c8 l&#8217;alternativa non parametrica al t-test per due campioni.<\/li>\n<li><strong>Wilcoxon signed-rank<\/strong>: per confrontare due campioni appaiati (misure prima\/dopo sullo stesso gruppo). Alternativa al t-test paired.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Vediamo un esempio SEO con la versione per campioni indipendenti.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Confronto due gruppi: un caso SEO<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Supponiamo di voler confrontare la durata delle sessioni tra pagine con featured snippet e pagine senza. I dati reali di sessioni sono tipicamente asimmetrici: la maggior parte delle sessioni dura pochi secondi, ma alcune durano minuti. \u00c8 esattamente lo scenario in cui Wilcoxon brilla.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La figura seguente mostra due distribuzioni simulate simili a quelle che si osservano in un caso reale. Il t-test d\u00e0 un p-value che potrebbe essere fuorviante, mentre Wilcoxon cattura correttamente la differenza tra le mediane.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1125\" height=\"675\" src=\"https:\/\/www.gironi.it\/blog\/wp-content\/uploads\/2026\/07\/wilcoxon-distribuzioni.png\" alt=\"Confronto tra due distribuzioni asimmetriche di durata sessione con e senza featured snippet, con p-value del t-test e del test di Wilcoxon\" class=\"wp-image-4391\" srcset=\"https:\/\/www.gironi.it\/blog\/wp-content\/uploads\/2026\/07\/wilcoxon-distribuzioni.png 1125w, https:\/\/www.gironi.it\/blog\/wp-content\/uploads\/2026\/07\/wilcoxon-distribuzioni-300x180.png 300w, https:\/\/www.gironi.it\/blog\/wp-content\/uploads\/2026\/07\/wilcoxon-distribuzioni-1024x614.png 1024w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption class=\"wp-element-caption\">Due distribuzioni asimmetriche di durata sessione: il t-test pu\u00f2 fallire nel rilevare la differenza, Wilcoxon no.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">La ragione per cui Wilcoxon funziona meglio in questo scenario sta nel meccanismo dei <strong>ranghi<\/strong>. Invece di confrontare le medie (che sono sensibili ai valori estremi), trasforma ogni valore nel suo rango all&#8217;interno dell&#8217;unione dei due gruppi e confronta le somme dei ranghi.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1050\" height=\"525\" src=\"https:\/\/www.gironi.it\/blog\/wp-content\/uploads\/2026\/07\/wilcoxon-ranghi.png\" alt=\"Conversione dei valori grezzi in ranghi per il test di Wilcoxon\" class=\"wp-image-4392\" srcset=\"https:\/\/www.gironi.it\/blog\/wp-content\/uploads\/2026\/07\/wilcoxon-ranghi.png 1050w, https:\/\/www.gironi.it\/blog\/wp-content\/uploads\/2026\/07\/wilcoxon-ranghi-300x150.png 300w, https:\/\/www.gironi.it\/blog\/wp-content\/uploads\/2026\/07\/wilcoxon-ranghi-1024x512.png 1024w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption class=\"wp-element-caption\">I valori grezzi vengono ordinati e convertiti in ranghi: si confrontano le somme dei ranghi, non i valori originali.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Come si vede, dopo la conversione in ranghi si perde l&#8217;informazione sulla distanza tra i valori, ma si guadagna in robustezza: i valori estremi non distorcono pi\u00f9 il risultato.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Calcolo in R<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Calcoliamo Wilcoxon sugli stessi dati della figura:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>set.seed(20260718)\n# Durata sessione in secondi, due gruppi\ncon_snippet &lt;- rlnorm(40, meanlog = 4.8, sdlog = 0.7)\nsenza_snippet &lt;- rlnorm(40, meanlog = 5.2, sdlog = 0.7)\n\n# Test di Wilcoxon-Mann-Whitney\nwilcox.test(con_snippet, senza_snippet)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;output restituisce la statistica W (la somma dei ranghi del primo gruppo) e il p-value. Se il p-value \u00e8 inferiore a 0,05, possiamo concludere che la differenza tra i due gruppi \u00e8 statisticamente significativa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per confrontare due campioni appaiati (stesse pagine prima e dopo un intervento), si usa la variante <strong>signed-rank<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Stesse pagine, prima e dopo ottimizzazione\nprima &lt;- rlnorm(30, meanlog = 4.5, sdlog = 0.6)\ndopo &lt;- prima + rnorm(30, mean = 15, sd = 25)\n# alcuni valori negativi possibili (sessioni diminuite)\n\n# Wilcoxon per campioni appaiati\nwilcox.test(prima, dopo, paired = TRUE)<\/code><\/pre>\n\n\n\n<p class=\"has-light-gray-background-color has-background wp-block-paragraph\"><strong>Un errore comune<\/strong>: pensare che Wilcoxon confronti le mediane. Non \u00e8 esatto. Wilcoxon verifica se le distribuzioni dei due gruppi sono spostate l&#8217;una rispetto all&#8217;altra (stocasticamente), non se le mediane sono diverse. In pratica, se le due distribuzioni hanno forme simili, si comporta come un test sulla mediana \u2014 ma non \u00e8 la stessa cosa. Un secondo errore: usare Wilcoxon anche quando i dati sono normali. In quel caso il t-test ha pi\u00f9 potenza statistica (riesce a rilevare differenze pi\u00f9 piccole). La regola \u00e8: <strong>normale \u2192 t-test; non normale \u2192 Wilcoxon<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prova tu<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Hai a disposizione i dati di sessioni di due gruppi di pagine (gruppo A: pagine con title ottimizzato; gruppo B: pagine senza).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gruppo_A &lt;- c(45, 132, 28, 67, 312, 54, 89, 43, 156, 78,\n              92, 34, 201, 67, 88, 43, 156, 67, 234, 55)\ngruppo_B &lt;- c(67, 156, 89, 123, 445, 98, 134, 67, 189, 102,\n              145, 56, 267, 89, 123, 78, 198, 89, 312, 78)\n\n# Domanda 1: esegui il test di Wilcoxon. Il p-value cosa suggerisce?<br># Domanda 2: esegui anche un t-test. I due test danno lo stesso risultato?<br># Domanda 3: cosa succede se aggiungi un outlier estremo a gruppo_A (valore 5000)?<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Soluzione:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wilcox.test(gruppo_A, gruppo_B)\nt.test(gruppo_A, gruppo_B)\n\n# Con outlier\ngruppo_A_out &lt;- c(gruppo_A, 5000)\nwilcox.test(gruppo_A_out, gruppo_B)\nt.test(gruppo_A_out, gruppo_B)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Noterai che il t-test cambia drasticamente con l&#8217;outlier, mentre Wilcoxon resta molto pi\u00f9 stabile: ecco la potenza dei ranghi.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<p class=\"wp-block-paragraph\">Wilcoxon \u00e8 il primo soccorso quando i dati non sono normali: funziona con campioni piccoli, non si fa influenzare dagli outlier, e in R basta una riga di codice. Ma ha un limite: confronta solo due gruppi. Quando ne abbiamo pi\u00f9 di due e i dati restano non normali, ci serve un&#8217;estensione \u2014 l&#8217;<strong>analisi della varianza non parametrica<\/strong>. Ne parliamo nel prossimo articolo.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Per approfondire<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Il test di Wilcoxon e gli altri test non parametrici sono trattati sistematicamente in <a href=\"https:\/\/www.amazon.it\/dp\/8891910651?tag=consulenzeinf-21\" rel=\"nofollow sponsored noopener\" target=\"_blank\"><em>Statistica<\/em><\/a> di Newbold, Carlson e Thorne, con le condizioni che guidano la scelta tra alternative parametriche e non parametriche. Per un approccio pi\u00f9 operativo con R, <a href=\"https:\/\/www.amazon.it\/dp\/8848141571?tag=consulenzeinf-21\" rel=\"nofollow sponsored noopener\" target=\"_blank\"><em>Analisi dei dati con R<\/em><\/a> di D&#8217;Orazio \u00e8 un ottimo riferimento con esempi pronti all&#8217;uso.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Immagina di confrontare la durata delle sessioni tra due gruppi di pagine: quelle con featured snippet e quelle senza. Prendi i dati, esegui un test t di Student, e il p-value \u00e8 0,08. Non significativo, apparentemente. Ma guardando i dati, noti che le distribuzioni sono fortemente asimmetriche: poche pagine con durate lunghissime, molte con durate &hellip; <a href=\"https:\/\/www.gironi.it\/blog\/il-test-di-wilcoxon\/\" class=\"more-link\">Leggi tutto<span class=\"screen-reader-text\"> &#8220;Test non parametrici: il test di Wilcoxon per dati non normali (con esempi R)&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","footnotes":""},"categories":[629],"tags":[659,661],"class_list":["post-2655","post","type-post","status-publish","format-standard","hentry","category-statistica-it","tag-test-non-parametrici-it","tag-wilcoxon-it"],"lang":"it","translations":{"it":2655,"en":3292},"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"post-thumbnail":false},"uagb_author_info":{"display_name":"paolo","author_link":"https:\/\/www.gironi.it\/blog\/author\/paolo\/"},"uagb_comment_info":1,"uagb_excerpt":"Immagina di confrontare la durata delle sessioni tra due gruppi di pagine: quelle con featured snippet e quelle senza. Prendi i dati, esegui un test t di Student, e il p-value \u00e8 0,08. Non significativo, apparentemente. Ma guardando i dati, noti che le distribuzioni sono fortemente asimmetriche: poche pagine con durate lunghissime, molte con durate&hellip;","_links":{"self":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts\/2655","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/comments?post=2655"}],"version-history":[{"count":5,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts\/2655\/revisions"}],"predecessor-version":[{"id":4393,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/posts\/2655\/revisions\/4393"}],"wp:attachment":[{"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/media?parent=2655"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/categories?post=2655"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gironi.it\/blog\/wp-json\/wp\/v2\/tags?post=2655"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}