08/04/2026
Ca orice om de știință de date, te vei confrunta adesea cu un set de date și te vei întreba care este distribuția generatoare a acestuia. Înțelegerea distribuției subiacente a datelor tale este fundamentală pentru a alege metodele statistice și de modelare adecvate. Fie că este vorba de prezicerea evenimentelor, de evaluarea riscurilor sau de construirea de modele predictive, cunoașterea distribuției datelor este un pas crucial. Din fericire, limbajul de programare R oferă instrumente puternice pentru a răspunde la această întrebare esențială: testele de adecvare a distribuției, cunoscute și sub numele de teste Goodness of Fit.

Să luăm un exemplu practic pentru a ilustra acest proces. Vom crea un set de date arbitrar, eșantionat dintr-o distribuție Gamma, și vom adăuga puțin zgomot gaussian pentru a simula imperfecțiunile din lumea reală, cum ar fi erorile de măsurare. Acest lucru ne va permite să demonstrăm cum putem identifica distribuția originală, chiar și în prezența „zgomotului”.
Iată cum generăm datele:
num_of_samples = 1000 x <- rgamma(num_of_samples, shape = 10, scale = 3) x <- x + rnorm(length(x), mean=0, sd = .1)Acum că avem datele, să explorăm procesul de găsire a distribuției potrivite.
- Ce este un Test de Adecvare a Distribuției (Goodness of Fit)?
- Procesul de Identificare a Distribuției Corecte
- Principalele Teste de Adecvare a Distribuției în R
- Exemplu Practic: Aplicarea Testelor în R
- Interpretarea Rezultatelor
- Întrebări Frecvente (FAQ)
- De ce este important să cunosc distribuția datelor mele?
- Ce înseamnă exact o „valoare p” în contextul testelor de adecvare?
- Când ar trebui să folosesc un test de adecvare versus o altă metodă de analiză?
- Pot folosi aceste teste pentru orice tip de date?
- Ce fac dacă niciun test nu indică o potrivire bună?
Ce este un Test de Adecvare a Distribuției (Goodness of Fit)?
Un test de adecvare a distribuției este o metodă statistică utilizată pentru a evalua dacă un set de date eșantionate provine dintr-o distribuție teoretică specificată (sau dacă două seturi de date provin din aceeași distribuție). Este o componentă vitală a analizei datelor, deoarece permite statisticienilor și analiștilor să valideze ipoteze despre natura datelor lor. Aceste teste sunt esențiale pentru a ne asigura că modelele statistice pe care le construim sunt bazate pe premise corecte.
Toate testele de adecvare sunt, în esență, teste de ipoteză statistică. Pentru testele de adecvare, avem următoarele ipoteze:
- Ipoteza nulă (H₀): Datele sunt consistente cu o distribuție de referință specificată. Cu alte cuvinte, nu există o diferență semnificativă între distribuția observată a datelor și distribuția teoretică propusă.
- Ipoteza alternativă (H₁): Datele NU sunt consistente cu o distribuție de referință specificată. Există o diferență semnificativă.
Pentru orice test de ipoteză nulă, este necesar să specificăm un prag, cunoscut sub numele de nivel de semnificație (sau nivel alfa, α). Valoarea nivelului de semnificație depinde de aplicație, dar se situează de obicei în intervalul [0.01, 0.1]. Dacă rezultatul testului statistic (valoarea p) este peste acest nivel, nu respingem ipoteza nulă. Altfel spus, dacă valoarea p este peste prag, concluzionăm că frecvențele eșantionului observat sunt suficient de similare cu frecvențele așteptate specificate în ipoteza nulă.
Este important să înțelegem doi termeni cheie:
- Distribuția de referință: Aceasta este distribuția teoretică pe care o asumăm că se potrivește cel mai bine datelor. Testul nostru de ipoteză verifică dacă această presupunere este corectă.
- Distribuția primară: Aceasta este distribuția reală din care au fost eșantionate datele. În practică, această distribuție este adesea necunoscută și încercăm să o estimăm și să o găsim.
Procesul de Identificare a Distribuției Corecte
Procesul de găsire a distribuției potrivite pentru un set de date poate fi împărțit în patru pași principali:
- Vizualizarea: Reprezentați grafic histograma datelor.
- Ghicirea: Încercați să intuiți ce distribuție s-ar potrivi cel mai bine datelor.
- Testarea: Utilizați un test statistic de adecvare a distribuției.
- Repetarea: Repetați pașii 2 și 3 dacă măsura de adecvare nu este satisfăcătoare.
Vizualizarea Datelor (Histograma în R)
Prima sarcină este destul de simplă. În R, putem folosi funcția hist() pentru a reprezenta grafic histograma unui vector de date. Această vizualizare inițială este crucială pentru a obține o primă idee despre forma datelor, simetria sau asimetria lor, prezența unor vârfuri multiple sau a unor valori extreme.
p1 <- hist(x, breaks=50, include.lowest=FALSE, right=FALSE)Histograma datelor noastre va arăta o formă specifică, care ne poate ghida spre tipul de distribuție probabilă.
Ghicirea Distribuției
A doua sarcină este puțin mai dificilă și se bazează în principal pe experiența și cunoștințele dumneavoastră despre distribuțiile statistice. Deoarece am creat noi înșine setul de date, este surprinzător de ușor să ghicim distribuția. Să presupunem că știm că distribuția este o distribuție Gamma cu parametrii shape = 10 și scale = 3. În scenarii reale, acest pas ar implica o analiză vizuală atentă, calculul unor statistici descriptive (medie, varianță, asimetrie, curtosis) și comparația lor cu proprietățile distribuțiilor comune (Normală, Exponențială, Poisson, etc.).
Principalele Teste de Adecvare a Distribuției în R
A treia sarcină este să efectuăm unele teste statistice pentru a vedea dacă datele provin de fapt din distribuția parametrică pe care am ghicit-o. Aceste teste sunt numite teste de adecvare a distribuției. Există trei teste de adecvare bine-cunoscute și utilizate pe scară largă, care au și pachete utile în R.
- Testul Chi-Pătrat (Chi-Square Test)
- Criteriul Cramér–von Mises
- Testul Kolmogorov–Smirnov
Să le explorăm pe rând.
Testul Chi-Pătrat (Chi-Square Test)
Testul Chi-Pătrat (χ²) este un test de adecvare utilizat pentru date categorice. El compară frecvențele observate (din datele noastre) cu frecvențele așteptate (din distribuția de referință). În R, puteți folosi funcția chisq.test() pentru a rula testul Chi-Pătrat. Trebuie să îi transmiteți datele și distribuția candidată.
Două aspecte trebuie luate în considerare:
- Distribuția candidată trebuie să fie o funcție de masă de probabilitate (PMF) a cărei sumă este 1. Dacă nu aveți distribuția normalizată, setați
rescale.plaTRUE. - Testul Chi-Pătrat este un test statistic, prin urmare trebuie rulat folosind simulări Monte Carlo pentru a vă asigura că rezultatul său este suficient de precis. Pentru aceasta, setați
simulate.p.valuelaTRUE. Puteți seta și numărul de iterații prin parametrulB.
Să vedem cum se creează null.probs, necesar pentru test.
Testul Chi-Pătrat necesită specificarea PMF-ului distribuției nule. Rețineți că, deși distribuția primară din care am eșantionat este o distribuție continuă (x ~ Gamma(10,3)), prin utilizarea histogramei o convertim în eșantioane discrete. Mai bine zis, prin utilizarea histogramei, am „împărțit” distribuția Gamma în 50 de „coșuri” (bins), iar p1$counts arată numărul de eșantioane care cad în diferite coșuri.
Deoarece distribuția primară și eșantioanele sunt discretizate, trebuie să facem același lucru pentru distribuția de referință. Cu alte cuvinte, pentru distribuția Gamma de referință, trebuie să calculăm probabilitatea fiecărui coș. Putem folosi următorul fragment de cod pentru a face acest lucru:
library('zoo') breaks_cdf <- pgamma(p1$breaks, shape=10, scale=3) null.probs <- rollapply(breaks_cdf, 2, function(x) x[2]-x[1])Prima linie calculează CDF (funcția de distribuție cumulativă) pentru fiecare punct de rupere (break point) din histograma x. Pentru a calcula probabilitatea fiecărui coș în intervalul [x1, x2), trebuie să calculăm pgamma(x2, shape=10, scale=3) - pgamma(x1, shape=10, scale=3). A doua linie de cod efectuează o diferență rulantă pentru a calcula această formulă.
Acum putem rula testul:
a <- chisq.test(p1$counts, p=null.probs, rescale.p=TRUE, simulate.p.value=TRUE)Testul de mai sus ar putea rezulta într-o valoare p de, să zicem, 0.2, care este peste nivelul de semnificație (de exemplu, 0.05). Asta înseamnă că nu putem respinge ipoteza nulă. Cu alte cuvinte, ipoteza că p1$counts sunt eșantioane din null.probs este o presupunere corectă.
Criteriul Cramér–von Mises
Criteriul Cramér–von Mises (CVM) este un test de adecvare care compară o distribuție empirică dată cu o altă distribuție. Spre deosebire de Chi-Pătrat, care lucrează cu frecvențe discretizate, CVM este mai potrivit pentru distribuții continue și se bazează pe funcțiile de distribuție cumulativă (CDF). Deoarece ipoteza noastră este că setul de date x are o distribuție Gamma, vom crea o altă distribuție Gamma cu shape = 10 și scale = 3 și o vom folosi ca distribuție de referință pentru testarea ipotezei. Rețineți că, deoarece a doua distribuție Gamma este baza comparației, utilizăm o dimensiune mare a eșantionului pentru a estima îndeaproape distribuția Gamma.
num_of_samples_ref = 100000 y <- rgamma(num_of_samples_ref, shape = 10, scale = 3) library(goftest) # Este posibil să aveți nevoie să instalați acest pachet res <- cvm.test(x, "pgamma", shape=10, scale=3) # Utilizare pentru un eșantion # Pentru două eșantioane, dacă doriți să comparați x cu y # res_two_samples <- CramerVonMisesTwoSamples(x,y) # p_value_from_U = 1/6*exp(-res_two_samples) # Aceasta este o aproximare specificăPentru un test de adecvare cu un singur eșantion, cum ar fi cvm.test, valoarea p este returnată direct. Dacă am fi folosit o funcție pentru două eșantioane (și am fi generat un U-value), am fi putut folosi o formulă de conversie pentru a obține valoarea p. De exemplu, o valoare p de 0.45, semnificativ peste nivelul de semnificație, ar indica faptul că cele două distribuții sunt suficient de apropiate.
Testul Kolmogorov–Smirnov
Testul Kolmogorov–Smirnov (KS) este un test neparametric simplu pentru distribuții de probabilitate unidimensionale. La fel ca testul Cramér–von Mises, el compară o distribuție empirică cu o distribuție de referință. Este, de asemenea, sensibil la diferențele de formă, locație și scală între cele două distribuții. Vom folosi testul în același mod ca și anterior, comparând eșantionul nostru x cu un eșantion mare generat din distribuția noastră Gamma de referință.
num_of_samples_ref = 100000 y <- rgamma(num_of_samples_ref, shape = 10, scale = 3) result = ks.test(x, y)Acest test ar putea genera o valoare p de, să zicem, 0.22, ceea ce înseamnă că vom accepta ipoteza nulă. Ambele teste (CVM și KS) indică faptul că datele noastre x sunt consistente cu o distribuție Gamma(10,3).
Exemplu Practic: Aplicarea Testelor în R
Am văzut cum se aplică fiecare test individual, dar este crucial să înțelegem ce se întâmplă atunci când ipoteza noastră inițială despre distribuția de referință este incorectă. Să vedem ce s-ar întâmpla dacă am decide să folosim o distribuție de referință diferită, de exemplu Gamma(11,3) sau o distribuție Normală N(30,90) (unde 30 este media și 90 este varianța, adică deviația standard este sqrt(90) ~ 9.48). Chiar dacă datele noastre au fost generate dintr-o distribuție Gamma(10,3), să testăm împotriva unor alternative.
Următorul tabel rezumă rezultatele pe care le-am putea obține în astfel de scenarii:
| Distribuția de Referință | Testul Chi-Pătrat (valoarea p) | Testul Kolmogorov–Smirnov (valoarea p) | Criteriul Cramér–von Mises (valoarea p) |
|---|---|---|---|
| Gamma(10,3) | 0.2 | 0.22 | 0.45 |
| Gamma(11,3) | 0.0005 | 0.0000000002 | 0.019 |
| N(30, 90) | 0.00004 | 0.00000000000000022 | 0.003 |
Interpretarea acestor rezultate este clară. Atunci când distribuția de referință este Gamma(10,3), toate testele returnează valori p mari (p > 0.05, de exemplu), indicând că nu putem respinge ipoteza nulă. Aceasta confirmă că datele noastre sunt consistente cu o distribuție Gamma(10,3), ceea ce este în concordanță cu distribuția primară din care au fost eșantionate datele.
În schimb, atunci când folosim o distribuție de referință diferită, cum ar fi Gamma(11,3) sau o distribuție Normală, valorile p devin extrem de mici (mult sub 0.05). Aceste valori p mici ne determină să respingem ipoteza nulă, sugerând că datele NU sunt consistente cu aceste distribuții alternative. Acest lucru demonstrează eficacitatea testelor de adecvare în identificarea celei mai potrivite distribuții pentru un set de date.
Interpretarea Rezultatelor
Valoarea p este probabil cel mai important indicator în rezultatele testelor de adecvare. Ea reprezintă probabilitatea de a observa un rezultat la fel de extrem sau mai extrem decât cel obținut, presupunând că ipoteza nulă este adevărată. O valoare p mică (de obicei sub 0.05 sau 0.01) indică faptul că este puțin probabil ca datele să provină din distribuția de referință propusă, ceea ce duce la respingerea ipotezei nule. Dimpotrivă, o valoare p mare sugerează că nu există suficiente dovezi pentru a respinge ipoteza nulă, ceea ce înseamnă că distribuția de referință ar putea fi o potrivire bună pentru date.
Este important de reținut că „nu respingerea ipotezei nule” nu înseamnă că ipoteza nulă este adevărată, ci doar că nu avem suficiente dovezi pentru a o infirma. De asemenea, niciun test nu este perfect, iar rezultatele ar trebui întotdeauna interpretate în contextul cunoștințelor despre domeniu și al altor analize exploratorii.
Întrebări Frecvente (FAQ)
De ce este important să cunosc distribuția datelor mele?
Cunoașterea distribuției datelor este crucială pentru: 1. Alegerea metodelor statistice adecvate (multe metode au presupuneri despre distribuția datelor, ex: testul t presupune normalitate). 2. Construirea de modele predictive precise. 3. Înțelegerea proceselor generatoare de date. 4. Efectuarea de inferențe statistice valide.
Ce înseamnă exact o „valoare p” în contextul testelor de adecvare?
Valoarea p este probabilitatea de a obține un rezultat al testului (sau unul mai extrem) dacă ipoteza nulă (că datele sunt consistente cu distribuția de referință) ar fi adevărată. O valoare p mică (ex: < 0.05) sugerează că rezultatul tău este improbabil sub ipoteza nulă, ducând la respingerea acesteia și la concluzia că distribuția nu se potrivește.
Când ar trebui să folosesc un test de adecvare versus o altă metodă de analiză?
Testele de adecvare sunt folosite specific pentru a valida o ipoteză despre forma distribuției datelor. Ele sunt diferite de testele de comparație a mediilor (ex: t-test, ANOVA) sau de testele de corelație. Folosește-le atunci când ai o ipoteză despre distribuția fundamentală a datelor și vrei să o verifici statistic.
Pot folosi aceste teste pentru orice tip de date?
Testul Chi-Pătrat este în principal pentru date categorice sau continue discretizate. Testele Kolmogorov–Smirnov și Cramér–von Mises sunt mai potrivite pentru date continue. Este esențial să alegi testul potrivit tipului de date pe care le ai și întrebării statistice specifice.
Ce fac dacă niciun test nu indică o potrivire bună?
Dacă niciun test nu indică o potrivire bună, s-ar putea să te confrunți cu date care nu urmează o distribuție parametrică standard, sau pot exista valori aberante (outliers) sau o combinație de distribuții. În astfel de cazuri, poți explora transformări ale datelor, modele non-parametrice sau modele de amestec (mixture models).
Identificarea distribuției corecte a datelor este o abilitate fundamentală pentru orice analist de date sau statistician. Testele de adecvare a distribuției în R oferă un set robust de instrumente pentru a valida presupunerile noastre despre natura datelor. Prin combinarea vizualizării datelor, a cunoștințelor statistice și a aplicării riguroase a acestor teste, putem lua decizii mai informate și construi modele mai precise. Practica constantă și experimentarea cu diferite seturi de date te vor ajuta să-ți perfecționezi intuiția și abilitățile în acest domeniu esențial al analizei datelor.
Dacă vrei să descoperi și alte articole similare cu Teste de Adecvare a Distribuției (Goodness of Fit) în R, poți vizita categoria Fitness.
