Tests estadístics
Aquesta part del curs tractarà sobre una part de l’estadística coneguda com a inferencial, que dit senzillament tracta de comprovar com es poden generalitzar les troballes identificades a la part descriptiva. Dit d’un altra forma la inferència estadística és el conjunt de mètodes que ens permeten extreure conclusions sobre una població a partir d’una mostra.
Un bon resum el podeu trobar aqui. D’una banda tractarem una mica la teoria mínima per comprendre els conceptes, posteriorment posarem fil a l’agulla estimant paràmetres mostrals, fent contrast d’hipòtesis i per últim tocarem algunes nocions pel càlcul del tamany mostral.
Distribucions de probabilitats
Les distribucions de probabilitat són models matemàtics que descriuen com es distribueixen les probabilitats d’ocurrència dels diferents valors que pot prendre una variable aleatòria en un experiment o fenòmen.
En termes més simples, una distribució de probabilitat especifica les possibles sortides d’un experiment aleatori i la probabilitat associada a cada una d’aquestes sortides. Aquestes distribucions poden ser discretes o contínues, depenent de si la variable aleatòria subjacent pren valors discrets (com comptar el nombre de cares al llançar una moneda) o valors continus (com l’altura de les persones).
| Distribucions de Probabilitat | |||
|---|---|---|---|
| Distribució | Tipus | Paràmetres | Aplicació |
| Normal | Contínua | μ (mitjana), σ (desv.) | Variables amb simetria natural |
| t de Student | Contínua | df (graus llibertat) | Contrastos amb n petit |
| Chi-quadrat | Contínua | df (graus llibertat) | Tests de bondat d’ajust |
| Binomial | Discreta | n, p | Proporcions d’èxit |
| Poisson | Discreta | λ | Comptatge d’esdeveniments rars |
| Exponencial | Contínua | λ | Temps d’espera |
| Hipergeomètrica | Discreta | N, K, n | Extracció sense reemplaçament |
Les distribucions de probabilitat són fonamentals en estadística i en moltes àrees de les ciències, l’enginyeria, l’economia i altres disciplines. Serveixen per diversos propòsits importants entre els quals els que ens interesen en aquest curs:
Inferència estadística: Les distribucions de probabilitat formen la base de la inferència estadística, que implica extreure conclusions sobre una població basades en una mostra de dades. Els intervals de confiança, les proves d’hipòtesis i altres mètodes estadístics depenen de les distribucions de probabilitat.
Modelatge de fenòmens reals: Les distribucions de probabilitat ens permeten modelar i comprendre una àmplia gamma de fenòmens en el món real, des del comportament de les poblacions fins als processos físics i financers. Tractarem els models en el següent capítol.
Algunes distribucions de probabilitat comunes inclouen la distribució normal, la distribució binomial, la distribució de Poisson, la distribució exponencial, entre d’altres. Cadascuna d’aquestes distribucions té característiques conegudes i permet aplicacions específiques.
Distribució normal
La distribució normal apareix en moltes variables biològiques com l’alçada, el pes, la tensió arterial o el colesterol. Modela dades contínues que s’agrupen al voltant d’una mitjana, amb simetria i variabilitat natural.
🔬 Exemple mèdic: l’índex de massa corporal (IMC) en adults sans sol seguir una distribució aproximadament normal.
X=rnorm(10000, 0, 1)
hist(X,freq=FALSE,col="lightsalmon",
main="Histograma i densitat",sub="Dades simulades d'una N(0,1)")
curve(dnorm(x,0,1),xlim=c(-5,5),col="blue",lwd=2,add=TRUE)Distribució t de Student
Quan no coneixem la desviació estàndard poblacional (σ) i n és petit (normalment n < 30), la distribució que utilitzem és la t de Student.
- És semblant a la normal, però amb cues més amples (més incertesa).
- A mesura que n augmenta, la t de Student s’aproxima a la normal.
🔬 Exemple mèdic: estimar la mitjana de glucosa en un grup petit de pacients.
x <- seq(-4, 4, 0.01)
plot(x, dt(x, df = 5), type = "l", col = "blue", lwd = 2,
ylab = "Densitat", main = "Distribució t vs normal")
lines(x, dnorm(x), col = "red", lwd = 2, lty = 2)
legend("topright", legend = c("t de Student (df=5)", "Normal"), col = c("blue", "red"),
lty = c(1,2), bty = "n")Distribució chi-quadrat
La distribució chi-quadrat (χ²) s’utilitza per: - Comparar si dues variables categòriques són independents (test de chi-quadrat). - Comprovar si les dades s’ajusten a una distribució teòrica.
🔬 Exemple mèdic: comprovar si la distribució de grups sanguinis en un hospital difereix de la població general.
# Diferents graus de llibertat
x <- seq(0, 30, 0.1)
df <- c(1, 3, 5, 10)
# Crear el gràfic buit
plot(x, dchisq(x, df[1]), type = "n",
ylim = c(0, 0.4), ylab = "Densitat",
main = "Distribucions χ² amb diferents graus de llibertat")
# Afegir les corbes
colors <- c("red", "blue", "darkgreen", "purple")
for (i in seq_along(df)) {
lines(x, dchisq(x, df[i]), col = colors[i], lwd = 2)
}
legend("topright", legend = paste("df =", df),
col = colors, lwd = 2, bty = "n")Distribució exponencial
Modela el temps entre esdeveniments independents que ocorren a una taxa constant.
🔬 Exemple mèdic: el temps entre dues admissions urgents per dolor toràcic en un servei d’urgències.
X <- rexp(10000, rate = 1/5)
hist(X, freq = FALSE, breaks = 40, col = "plum",
main = "Distribució exponencial (λ = 1/5)",
xlab = "Temps entre esdeveniments")
curve(dexp(x, rate = 1/5), col = "purple", lwd = 2, add = TRUE)Distribució binomial
Modela el nombre d’èxits en un nombre fix d’assajos, on cada assaig té només dues possibilitats: èxit o fracàs, per tant dades discretes. Quan la n és gran (np ≥ 5 i n(1-p) ≥ 5) o uns treinta experiments si la probabilitat es proxima a 0.5, la distribució binomial s’aproxima a la normal.
🔬 Exemple mèdic: en un assaig clínic amb 20 pacients, podem modelar quants tenen una resposta positiva al tractament (èxit = millora, fracàs = no).
x <- 0:20
probs <- dbinom(x, size = 20, prob = 0.5)
barplot(probs, names.arg = x,
col = "lightblue", border = "darkblue",
main = "Distribució binomial B(20, 0.5)",
xlab = "Nombre d'èxits", ylab = "Probabilitat")Distribució de Poisson
Modela el nombre d’esdeveniments rars que passen en un interval de temps o espai fix. La lambda es la mitjana esperada de successos per unitat de temps o espai. A mesura que augmenta comença a semblar-se a una normal (aprox quan lambda >10)
🔬 Exemple mèdic: el nombre de casos d’una malaltia rara detectats en una setmana en una ciutat.
x <- 0:15
probs <- dpois(x, lambda = 4)
barplot(probs, names.arg = x,
col = "palegreen", border = "darkgreen",
main = "Distribució de Poisson (λ = 4)",
xlab = "Nombre d’esdeveniments", ylab = "Probabilitat")| Funcions per treballar amb distribucions en R | ||
|---|---|---|
| Funció | Significat | Exemple |
| rnorm(n, m, sd) | Simula valors normals (aleatoris) | rnorm(100, 0, 1) |
| dnorm(x, m, sd) | Densitat de probabilitat (valor concret) | dnorm(0, 0, 1) |
| pnorm(x, m, sd) | Probabilitat acumulada | pnorm(1.96, 0, 1) |
| qnorm(p, m, sd) | Quantil associat a la probabilitat p | qnorm(0.975, 0, 1) |
| rbinom(n, size, p) | Simula valors binomials | rbinom(100, 10, 0.5) |
| dbinom(x, size, p) | Probabilitat exacta de x èxits | dbinom(5, 10, 0.5) |
| pbinom(x, size, p) | Probabilitat acumulada | pbinom(5, 10, 0.5) |
| qbinom(p, size, p) | Nombre mínim d’èxits amb p% conf. | qbinom(0.95, 10, 0.5) |
| rpois(n, lambda) | Simula valors de Poisson | rpois(100, 4) |
| dpois(x, lambda) | Probabilitat exacta per x esdeveniments | dpois(2, 4) |
| rexp(n, rate) | Simula temps entre esdeveniments | rexp(100, 1/5) |
| dexp(x, rate) | Densitat de temps esperat | dexp(5, 1/5) |
TCL i z scores.
Teoria central del límit
La Teoria Central del Límit (TCL) és un concepte fonamental en estadística que estableix el següent:
Si agafem mostres aleatòries de mida n d’una població amb qualsevol distribució (amb mitjana μ i desviació estàndard σ), la distribució de les mitjanes mostral tendirà a seguir una distribució normal a mesura que n augmenti.
Això passa encara que la població no sigui normal, sempre que n sigui prou gran (aprox n>30).
🔬 Aplicació: permet construir intervals de confiança i fer contrastos fins i tot si no coneixem la distribució original de les dades.
En termes més senzills:
- Independència de les mostres: Cada mostra ha de ser independent de les altres.
- Tamany de la mostra prou gran: El tamany de la mostra (nombre d’observacions a cada mostra) ha de ser prou gran (generalment més de 30) perquè s’apliqui la TCL.
- Aproximació a una distribució normal: Les mitjanes de les mostres seguiran una distribució normal, independentment de la forma de la distribució original de la població.
Per què és important:
- La Teoria Central del Límit és important perquè ens permet fer inferències sobre una població basant-nos en mostres d’aquesta població, ja que ens dóna una idea de com es comporten les mitjanes de les mostres.
- Ens permet aplicar mètodes estadístics basats en la distribució normal, com ara intervals de confiança i proves d’hipòtesis, fins i tot quan no coneixem la forma exacta de la distribució de la població original.
En resum, la Teoria Central del Límit ens proporciona una base sòlida per a molts mètodes estadístics i ens permet entendre com es comporten les mostres d’una població quan es prenen mesures repetides de manera independent.
ULL: La utilitat d’aquestes distribucions és que coneixem les seves propietats, de tal forma que si estandaritzem les nostres dades mostrals respecte a una distribució coneguda, podrem interpretar i comparar dades.
Què són els Z-scores?
Els Z-scores, també coneguts com a puntuacions Z o punts Z, són una mesura estadística que indica quantes desviacions estàndard un valor està per sobre o per sota de la mitjana d’un conjunt de dades. S’utilitzen principalment per estandarditzar i comparar dades que provenen de diferents distribucions.
La fórmula per calcular el Z-score d’una observació ( X ) en una distribució normal amb mitjana ( ) i desviació estàndard ( ) és:
\[ [Z = \frac{X - \mu}{\sigma} ] \]
On: - ( X ) és el valor individual de l’observació. - ( ) és la mitjana de la població. - ( ) és la desviació estàndard de la població.
El Z-score indica quantes desviacions estàndard un valor està per sobre o per sota de la mitjana. Si el Z-score és positiu, significa que el valor està per sobre de la mitjana, mentre que si és negatiu, indica que està per sota de la mitjana.
Algunes aplicacions comunes dels Z-scores inclouen:
Identificació de valors atípics: Els valors amb Z-scores molt alts o molt baixos en comparació amb la resta de les dades poden ser considerats valors atípics.
Normalització de dades: Els Z-scores permeten comparar i analitzar dades que provenen de diferents distribucions en una escala comuna.
Anàlisi estadística i presa de decisions: Els Z-scores són útils per comparar el rendiment relatiu de diferents variables en una mateixa població o entre diferents poblacions.
En resum, els Z-scores són una eina estadística important que permet estandarditzar i comparar dades en diferents contextos, facilitant l’anàlisi i la interpretació de les dades en diverses disciplines. Calcular el z-score
# Calcular la probabilitat acumulada per a un z-score especific
z_score <- 1.96 # Z-score típico para un intervalo de confianza del 95%
pnorm(z_score)[1] 0.9750021
Estimacions puntuals i intervals de confiança
Una estimació puntual és un únic valor calculat a partir d’una mostra que utilitzem com a millor estimació d’un paràmetre poblacional.
Exemples: - La mitjana mostral \(\bar{X}\) estima la mitjana poblacional \(\mu\) - La proporció mostral \(\hat{p}\) estima la proporció poblacional \(p\)
pes <- c(70, 72, 68, 65, 74, 71, 69)
mean(pes) # estimació puntual de la mitjana de pes[1] 69.85714
Un interval de confiança (IC) és un rang de valors dins el qual esperem trobar el valor real del paràmetre amb una certa confiança (habitualment el 95%).
No vol dir que el 95% de la població hi caigui, sinó que si repetíssim l’estudi moltes vegades, el 95% dels intervals calculats contindrien la mitjana real.
Interval de confiança per la mitjana
Quan coneixem la desviació estàndard poblacional (cas teòric): Ús de z (distribució normal standar amb mitjana 0 i DE = 1)
\[ \text{IC} = \bar{X} \pm Z_{\alpha/2} \cdot \frac{\sigma}{\sqrt{n}} \]
Quan no la coneixem (cas real i el que fem servir sempre), utilitzem la desviació mostral s i la t de Student:
\[ \text{IC} = \bar{X} \pm t_{\alpha/2, \, df} \cdot \frac{s}{\sqrt{n}} \]
set.seed(42)
pes <- rnorm(25, mean = 70, sd = 5)
t.test(pes) # Calcula la mitjana i l'IC del 95%
One Sample t-test
data: pes
t = 54.302, df = 24, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
68.24148 73.63389
sample estimates:
mean of x
70.93768
hist(pes, col = "lightblue", main = "Pes dels pacients")
abline(v = mean(pes), col = "blue", lwd = 2)
abline(v = t.test(pes)$conf.int[1], col = "red", lty = 2)
abline(v = t.test(pes)$conf.int[2], col = "red", lty = 2)❌ L’IC no vol dir que hi ha un 95% de probabilitat que la mitjana estigui dins aquest interval.
✅ Vol dir que, si repetíssim l’experiment moltes vegades, el 95% dels intervals inclourien el valor real de la mitjana poblacional.
Interval de confiança per proporcions
Una proporció mostral \(\hat{p}\) és el nombre d’èxits dividit pel total d’observacions:
\[ \hat{p} = \frac{x}{n} \]
on: - ( x ): nombre d’èxits - ( n ): mida de la mostra
Quan n és prou gran, podem calcular l’IC per a una proporció mitjançant la distribució normal:
\[ \text{IC} = \hat{p} \pm Z_{\alpha/2} \cdot \sqrt{\frac{\hat{p}(1 - \hat{p})}{n}} \]
# 42 pacients responen al tractament d’un total de 100
prop.test(42, 100)
1-sample proportions test with continuity correction
data: 42 out of 100, null probability 0.5
X-squared = 2.25, df = 1, p-value = 0.1336
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
0.3233236 0.5228954
sample estimates:
p
0.42
Es recomana binom.test() quan:
- La mida mostral n és petita
- La proporció és molt propera a 0 o a 1
- Volem un resultat exacte, no basat en aproximació normal
binom.test(4, 10)
Exact binomial test
data: 4 and 10
number of successes = 4, number of trials = 10, p-value = 0.7539
alternative hypothesis: true probability of success is not equal to 0.5
95 percent confidence interval:
0.1215523 0.7376219
sample estimates:
probability of success
0.4
binom.test() fa servir la distribució binomial exacta i és preferible en mostres petites.
prop.test() fa una aproximació normal i és útil quan n és gran (n·p i n·(1-p) ≥ 5).
Test estadistics
Basant-se en els conceptes previs, els tests estadístics són eines que permeten analitzar dades i prendre decisions sobre hipòtesis o patrons en poblacions o mostres. Serveixen per comprovar si les diferències observades entre grups o variables són atribuïbles a l’atzar, o bé si hi ha una associació significativa entre elles. Cal recordar que una associació estadística no implica necessàriament una relació causal.
Els tests estadístics es poden agrupar en diverses categories:
Tests d’hipòtesis: permeten avaluar si hi ha evidència suficient per rebutjar la hipòtesi nul·la.
Tests de comparació de mitjanes: indiquen si hi ha diferències significatives entre les mitjanes de dos o més grups.
Tests d’independència: serveixen per determinar si hi ha una associació significativa entre variables categòriques.
Tests de correlació: avaluen la força i la direcció de la relació entre dues variables quantitatives.
Tests de bondat d’ajustament: permeten comprovar si una mostra s’ajusta a una distribució teòrica específica.
En aquesta imatge es resumeixen els principals tests estadistics
Conceptes dels Tests Estadístics
Aquí hi ha alguns dels conceptes fonamentals associats als tests estadístics:
Hipòtesi Nul·la ((H_0)): És una afirmació que es fa sobre un paràmetre poblacional. Es considera com a punt de partida i s’assumirà que és certa a menys que les dades mostrin evidència significativa en contra.
Error de Tipus I i Tipus II:
- Error de Tipus I: Rebutjar incorrectament la hipòtesi nul·la quan és certa.
- Error de Tipus II: Acceptar incorrectament la hipòtesi nul·la quan és falsa.
Nivell de Significança (()): És la probabilitat de cometre un error de tipus I. Generalment es fixa a un valor petit com ara 0.05 o 0.01.
P-valor: És la probabilitat d’obtenir un resultat igual o més extrem que el resultat observat, si la hipòtesi nul·la és certa. Si el p-valor és menor que el nivell de significança (()), es rebutja la hipòtesi nul·la.
Estadístic de Prova: És una estadística calculada a partir de les dades de la mostra, que s’utilitza per prendre una decisió sobre la hipòtesi nul·la. El tipus d’estadístic de prova depèn del tipus de test estadístic que s’estigui utilitzant.
Els tests estadístics són crucials per a l’anàlisi de dades i la presa de decisions en molts camps, i la comprensió d’aquests conceptes és fonamental per a una interpretació precisa dels resultats dels tests estadístics.
A partir de les dades mostrals, calculem una estadística de test i un p-valor, i decidim si rebutgem (H_0) o no.
Aplicació: Estimacions puntuals
Les estimacions puntuals permeten, a partir d’una mostra i en virtut de la TCL i els z-scores, inferir quin és el parámetre a la població. És molt sencill fer-ho en R i emprarem les dades que ja coneixem.
Estimació d’una mitjana poblacional
Estimarem la mitjana d’edat de la població de passatgers del Titànic per diferents nivells de confiança. En aquest cas com és una variable contínua de variança desconeguda, farem servir la distribució de student. El resultat ens dóna la mitjana mostral, un interval de confiança al nivell alfa que hem posat, i un test d’hipòtesis (p-value)
library(readr)
titanic <- read_csv("titanic.csv")
t.test(titanic$Age)
One Sample t-test
data: titanic$Age
t = 54.63, df = 713, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
28.63179 30.76645
sample estimates:
mean of x
29.69912
t.test(titanic$Age, conf.level = 0.8)
One Sample t-test
data: titanic$Age
t = 54.63, df = 713, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 0
80 percent confidence interval:
29.00177 30.39647
sample estimates:
mean of x
29.69912
t.test(titanic$Age, conf.level = 0.7)
One Sample t-test
data: titanic$Age
t = 54.63, df = 713, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 0
70 percent confidence interval:
29.13526 30.26297
sample estimates:
mean of x
29.69912
Aqui tenim la mitjana poblacional, un interval de confiança i un test dhipòtesis: “alternative hypothesis: true mean is not equal to 0”
Calculeu ara la mitjana de la població dels personatges d’Starwars al 99% de confiança.
Estimació d’una proporció.
Per calcular la proporció ulls blaus a L’ecosistema Starwars farem servir un test binomial (s’ha d’especificar el número d’encerts, el numero d’intents i el nivell de confiança.)
tabyl(starwars$eye_color) %>% adorn_totals() %>% gt()| starwars$eye_color | n | percent |
|---|---|---|
| black | 10 | 0.11494253 |
| blue | 19 | 0.21839080 |
| blue-gray | 1 | 0.01149425 |
| brown | 21 | 0.24137931 |
| dark | 1 | 0.01149425 |
| gold | 1 | 0.01149425 |
| green, yellow | 1 | 0.01149425 |
| hazel | 3 | 0.03448276 |
| orange | 8 | 0.09195402 |
| pink | 1 | 0.01149425 |
| red | 5 | 0.05747126 |
| red, blue | 1 | 0.01149425 |
| unknown | 3 | 0.03448276 |
| white | 1 | 0.01149425 |
| yellow | 11 | 0.12643678 |
| Total | 87 | 1.00000000 |
binom.test(19 , 87, conf.level = 0.9)
Exact binomial test
data: 19 and 87
number of successes = 19, number of trials = 87, p-value = 1.235e-07
alternative hypothesis: true probability of success is not equal to 0.5
90 percent confidence interval:
0.1479883 0.3037702
sample estimates:
probability of success
0.2183908
Aquí tenim la proporció mostral, un interval de confiança i un test d’hipótesis: “alternative hypothesis: true probability of success is not equal to 0.5”
Test de hipótesis
Comparació de dues mitjanes
Per comparar dues mitjanes fem servir t.test() si les dades compleixen les següents condicions:
✅ 1. Variables contínues (com alçada, pes, pressió arterial…)
✅ 2. Mostres independents (si compares dos grups)
✅ 3. Distribució aproximadament normal (sobretot si n < 30)
✅ 4. Variància similar entre grups (opcionalment es pot testejar amb var.test())
En cas contrari es fa servir wilcox.test() que es un test no parametric. La hipótesis nul·la es que les mitjanes son similars. El p-valor és la probabilitat d’obtenir unes dades igual o més extremes que les observades, suposant que (H_0) és certa. Regla habitual: - Si p < 0.05, rebutgem (H_0) → hi ha evidència contra la hipòtesi nul·la - Si p ≥ 0.05, no rebutgem (H_0) → no hi ha evidència suficient.
Si es tracta de mostres aparellades (mesures de pes de cada pacient abans i despres d’una dieta), es tractaria de mostres no independents i s’ha de fer servir t.test(...,paired=TRUE) o en el cas no parametric wilcox.test(...,paired=TRUE).
Suposem que volem comparar l’alçada mitjana entre mascles i femelles de l’univers Star Wars.
dades <- starwars %>%
filter(!is.na(height), sex %in% c("male", "female")) %>%
select(name, sex, height)
# Comprovació gràfica opcional (no essencial si no hi ha temps)
boxplot(height ~ sex, data = dades, col = c("lightblue", "pink"),
main = "Comparació d’alçada entre sexes")# Test t
t.test(height ~ sex, data = dades)
Welch Two Sample t-test
data: height by sex
t = -1.1817, df = 48.471, p-value = 0.2431
alternative hypothesis: true difference in means between group female and group male is not equal to 0
95 percent confidence interval:
-20.396341 5.293584
sample estimates:
mean in group female mean in group male
171.5714 179.1228
# Wilcox
wilcox.test(height ~ sex, data = dades)
Wilcoxon rank sum test with continuity correction
data: height by sex
W = 228, p-value = 0.01364
alternative hypothesis: true location shift is not equal to 0
❌ p < 0.05 no vol dir que “hi ha diferències clíniques importants” ✅ Només vol dir que les diferències no són atribuïbles a l’atzar
✅ El test estadístic no prova que (H_1) sigui certa, només diu si (H_0) és incompatible amb les dades
Comparació de més de dues mitjanes (ANOVA)
El test ANOVA (anàlisi de la variància) compara la mitjana de més de dos grups.
- (H_0): totes les mitjanes són iguals
- (H_1): almenys una mitjana és diferent
📦 Exemple mèdic: comparar la pressió arterial mitjana entre 3 grups de tractament.
Perquè els resultats d’un ANOVA siguin vàlids, cal que es compleixin aquestes condicions:
✅ 1. Normalitat dins de cada grup
Les dades de cada grup (categoria) han de seguir una distribució aproximadament normal.
✅ 2. Homogeneïtat de variàncies
La variància dels grups hauria de ser similar (condició de homocedasticitat).
✅ 3. Independència de les observacions
Les dades han de provenir de mostres independents.
❗ Si aquestes condicions no es compleixen, es poden fer servir tests no paramètrics (Kruskal-Wallis).
boxplot(Sepal.Length ~ Species, data = iris,
col = c("lightblue", "lightgreen", "lightpink"),
main = "Comparació de la longitud del sèpal per espècie")anova_resultat <- aov(Sepal.Length ~ Species, data = iris)
summary(anova_resultat) Df Sum Sq Mean Sq F value Pr(>F)
Species 2 63.21 31.606 119.3 <2e-16 ***
Residuals 147 38.96 0.265
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Si p < 0.05, hi ha diferències significatives entre almenys dues espècies. Però no sabem quines → cal fer un test post hoc com el Tukey HSD.
TukeyHSD(anova_resultat) Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = Sepal.Length ~ Species, data = iris)
$Species
diff lwr upr p adj
versicolor-setosa 0.930 0.6862273 1.1737727 0
virginica-setosa 1.582 1.3382273 1.8257727 0
virginica-versicolor 0.652 0.4082273 0.8957727 0
Si l’alçada no és normal, hi ha outliers o en general no podem assegurar que es compleixin les condicions del ANOVA, podem usar l’alternativa no paramètrica kruskal.test()
kruskal.test(Sepal.Length ~ Species, data = iris)
Kruskal-Wallis rank sum test
data: Sepal.Length by Species
Kruskal-Wallis chi-squared = 96.937, df = 2, p-value < 2.2e-16
Comparacio de dues proporcions
🧠 Objectiu: Comprovar si la proporció d’una característica és igual entre dos o més grups.
Fem servir el test prop.test() per comparar dues o mes proporcions quan cada observació te dos possibles resultats. Supòsits per aplicar el test:
Supòsits:
Mostres independents.
Grandàries suficientment grans (mínim ~5 èxits i ~5 fracassos per grup).
Variables categòriques (tipus factor).
Observacions independents.
prop.test(c(20, 30), c(100, 100)) # proporcions 20% vs 30%
2-sample test for equality of proportions with continuity correction
data: c(20, 30) out of c(100, 100)
X-squared = 2.16, df = 1, p-value = 0.1416
alternative hypothesis: two.sided
95 percent confidence interval:
-0.22921995 0.02921995
sample estimates:
prop 1 prop 2
0.2 0.3
Si no es compleixen els supòsits anteriors, s’hauria de fer servir el test exacte de Fisher, fisher.test(), con la limitació de aplicar-se a una taula 2x2 i per tant nomès serveix per dos categories.
Analitzem si son diferents els supervivents del titànic en funció del génere
titanic_sex <- table(titanic$Sex, titanic$Survived)
prop.table(titanic_sex,1)
0 1
female 0.2579618 0.7420382
male 0.8110919 0.1889081
prop.test(titanic_sex)
2-sample test for equality of proportions with continuity correction
data: titanic_sex
X-squared = 260.72, df = 1, p-value < 2.2e-16
alternative hypothesis: two.sided
95 percent confidence interval:
-0.6135708 -0.4926894
sample estimates:
prop 1 prop 2
0.2579618 0.8110919
Test d’indèpendencia.
Un test d’independència és una tècnica estadística utilitzada per determinar si hi ha una relació significativa entre dues variables categòriques en una població. En altres paraules, un test d’independència s’utilitza per avaluar si les freqüències observades en una taula de contingència difereixen significativament de les freqüències esperades sota la hipòtesi nul·la d’independència entre les dues variables.
Objectiu
Comprovar si dues variables categòriques estan associades (és a dir, si són independents o no).
✅ Test paramètric: chisq.test()
- Compara les freqüències observades en una taula de contingència amb les esperades sota la hipòtesi d’independència.
- Retorna valor p i una taula de valors esperats.
Supòsits
- Observacions independents.
- Almenys el 80% de les cel·les amb valors esperats ≥ 5.
- Mostra representativa de la població.
Alternativa no paramètrica: fisher.test()
- Només vàlida per taules 2x2.
- Recomanada quan els valors esperats són petits.
Es independent el sexe de tenir ulls blaus a starwars?
dades <- starwars %>%
filter(sex %in% c("male", "female"), !is.na(eye_color)) %>%
mutate(ulls_blaus = ifelse(eye_color == "blue", "blue", "altres"))
# Creem una taula 2x2
taula <- table(dades$sex, dades$ulls_blaus)
taula
altres blue
female 10 6
male 48 12
prop.table(taula,1)
altres blue
female 0.625 0.375
male 0.800 0.200
chisq.test(taula)Warning in stats::chisq.test(x, y, ...): L'aproximació Chi-quadrat pot ser
incorrecta
Pearson's Chi-squared test with Yates' continuity correction
data: taula
X-squared = 1.2815, df = 1, p-value = 0.2576
Veiem com no es pot dir que hi hagin diferències significatives entre sexes de tenir els ulls blaus. Com tenim una cel·la amb 6 (dones d’ulls blaus), aplicarem per seguretat el test de fisher, que tampoc assoleix la significació estadística.
fisher.test(taula)
Fisher's Exact Test for Count Data
data: taula
p-value = 0.1868
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
0.1103714 1.7046217
sample estimates:
odds ratio
0.4221703
Test de bondat de l’ajust
Objectiu
Comprovar si la distribució observada d’una variable categòrica s’ajusta a una distribució teòrica esperada.
✅ Test paramètric: chisq.test()
- Compara les freqüències observades amb les esperades segons una distribució concreta (uniforme, binomial, etc.).
- Retorna valor p i residus.
Supòsits
- Observacions independents.
- Categories mútuament excloents.
- Esperats ≥ 5 per a cada categoria.
- Mostra aleatòria i representativa.
Alternativa no paramètrica
- No hi ha una alternativa directa.
- Es pot fer bootstrap o simulació si no es compleixen els supòsits, però no és habitual en nivell bàsic.
les espècies més comunes de Star Wars es distribueixen uniformement?
# Seleccionem les espècies més freqüents i filtrem NA
dades <- starwars %>%
filter(species %in% c("Human", "Droid", "Gungan"))
# Comptem quants individus hi ha per espècie
observat <- table(dades$species)
# Suposem que les tres espècies haurien de ser igualment freqüents (distribució uniforme)
# Definim les probabilitats esperades
p_esperades <- rep(1/3, 3)
# Fem el test de bondat de l’ajust
chisq.test(x = observat, p = p_esperades)
Chi-squared test for given probabilities
data: observat
X-squared = 42.591, df = 2, p-value = 5.643e-10
Com p<0.05 no podem dir que les espècies es distribueixin uniformement.
🧾 Resum comparatiu dels tests amb chi-quadrat
| Test | Objectiu principal | Variables | Test paramètric | Supòsits clau | Alternativa no paramètrica |
|---|---|---|---|---|---|
| Contrast de proporcions | Comparar si dues o més proporcions són iguals | Binàries (sí/no) | prop.test() |
Mostres independents, ≥5 èxits/fracassos | fisher.test() (2x2) |
| Test d’independència | Comprovar si dues variables categòriques estan associades | Categòriques (2x2 o nxm) | chisq.test() |
Observacions independents, esperats ≥5 | fisher.test() (2x2 o 2xn amb simulació) |
| Bondat de l’ajust | Comprovar si una variable segueix una distribució teòrica | Categòrica (1 variable) | chisq.test() |
Esperats ≥5, distribució teòrica coneguda | Bootstrap o simulació (avançat) |
Contrast de correlació
Objectiu
Avaluar si existeix una relació lineal significativa entre dues variables quantitatives.
Test paramètric: cor.test()
- Calcula el coeficient de correlació (de Pearson per defecte) i contrasta si és diferent de 0.
- Retorna valor p i interval de confiança per al coeficient.
Supòsits
- Relació lineal entre les dues variables.
- Ambdues variables són quantitatives i aproximadament normals.
- No hi ha valors extrems influents.
Alternatives no paramètriques
method = "spearman"→ correlació de rangs (ordinal o no lineal).method = "kendall"→ per mostres petites o amb molts empats.
Exemple: correlació entre alçada i pes (Star Wars)
# Filtrem els missings
dades <- starwars %>%
filter(!is.na(height), !is.na(mass))
# Test de correlació de Pearson
cor.test(dades$height, dades$mass, method = "pearson")
Pearson's product-moment correlation
data: dades$height and dades$mass
t = 0.99653, df = 57, p-value = 0.3232
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.1295651 0.3743950
sample estimates:
cor
0.130859
# Opcional: Spearman
cor.test(dades$height, dades$mass, method = "spearman")Warning in cor.test.default(dades$height, dades$mass, method = "spearman"):
Cannot compute exact p-value with ties
Spearman's rank correlation rho
data: dades$height and dades$mass
S = 9608.4, p-value = 1.393e-10
alternative hypothesis: true rho is not equal to 0
sample estimates:
rho
0.7192179
Aqui tenim discrepàncies entre el método parametric (pearson) i el no paramètric (spearman). Hauriem de verificar els supòsits del test avaluant la normalitat, la linealitat i els outliers.
Verificació de normalitat
Abans d’aplicar tests com t.test() , anova(), test de correlacions o regressió, és important comprovar si les dades són aproximadament normals.
Això es pot fer visualment o numèricament:
✅ Test habitual: shapiro.test()
- Apte per mostres petites i mitjanes (recomanat < 50-100 observacions).
- La hipótesi nul·la és que es tracta de’una distribució normal. Retorna un valor p:
- Si p > 0.05 → no podem rebutjar la normalitat.
- Si p < 0.05 → evidència que la variable no és normal.
🔹 Supòsits
- Mostra contínua.
- Valors independents.
🔁 Alternatives o tests complementaris
ks.test()→ més general, però no recomanat si la mitjana i desviació no estan especificades.lillie.test()→ test de Lilliefors (necessita paquetnortest). És la solució al Kolmogorov-Smirnov si es desconeixen la mitjana i desviació típica.anderson.darling.test()→ test potent del paquetnortest. Dona mes pes als extrems de la distrubució i per tant es més sensible.
📊 Alternatives visuals
- Histograma → Si la forma és aproximadament simètrica i acampanada.
- QQ plot → Compara els quantils teòrics d’una distribució normal amb els quantils reals de les teves dades. Si les dades són normals, els punts cauen aproximadament sobre una línia recta.
Comprovem la normalitat de l’alçada dels humans de starwars (en principi hauria de ser una distribució normal)
# Dades filtrades
dades <- starwars %>%
filter(species == "Human", !is.na(height))
dim(dades)[1] 30 14
# Test de Shapiro-Wilk
shapiro.test(dades$height)
Shapiro-Wilk normality test
data: dades$height
W = 0.95554, p-value = 0.2373
# Histograma
ggplot(dades, aes(x = height)) +
geom_histogram(bins = 8, fill = "lightblue", color = "black") +
labs(title = "Histograma de l’alçada (espècie: Human)")# QQ Plot
ggplot(dades, aes(sample = height)) +
stat_qq() + stat_qq_line(color = "red") +
labs(title = "QQ Plot: alçada (Human)")Com hi ha 30 individus podem aplicar el Shaphiro test, que ens dona una p = 0.23, per tant no podem dir que no sigui normal. L’histograma ho sembla pero el qqplot recolça que es tracta d’una distribució aproximadament normal i podem aplicar métodes on aquesta condició sigui necessaria.
- Si les dades semblen normals gràficament i n és gran, no cal obsessionar-se amb els p-valors dels tests.
- Si les dades són clarament asimètriques o amb outliers, considera tests no paramètrics.
Resum dels test de normalitat
| Test | Coneix mitjana i SD? | Apte per mostres petites? | Senzill d’aplicar? | Comentari |
|---|---|---|---|---|
shapiro.test() |
❌ No | ✅ Sí (< 50 idealment) | ✅ Sí | El més recomanat per la majoria de casos |
ks.test() |
✅ Sí (cal fixar-les) | ❌ No | ⚠️ Amb compte | Només vàlid si no uses els paràmetres de la mostra |
lillie.test() |
❌ No | ✅ Sí | ⚠️ Cal nortest |
Millor alternativa a ks.test() |
ad.test() |
❌ No | ✅ Sí | ⚠️ Cal nortest |
Més sensible als extrems, ideal en molts casos |
Verificació de la igualtat de variàncies
Alguns tests, com l’ANOVA o el t-test clàssic, assumeixen que els grups tenen la mateixa variància.
🧪 Test de Bartlett
- Apte si les dades són normals.
bartlett.test(y ~ grup, data = dades)
🧪 Test de Levene (més robust)
- Funciona millor si hi ha desviacions de la normalitat.
car::leveneTest(y ~ grup, data = dades)
🔍 Si no es compleix la igualtat de variàncies, pots usar: -
t.test(..., var.equal = FALSE)-oneway.test(...)en lloc deaov()
Comprovem si l’alçada entre els grups de especies de starwars te la mateixa variança (i es pot aplicar t.test() o ANOVA).
dades <- starwars %>%
filter(species %in% c("Human", "Droid", "Gungan"), !is.na(height))
# Test de Kruskal–Wallis
kruskal.test(height ~ species, data = dades)
Kruskal-Wallis rank sum test
data: height by species
Kruskal-Wallis chi-squared = 10.52, df = 2, p-value = 0.005195
En aquest cas rebutjem l’hipótesi nula sobre igualtat de variances.
Si estàs aplicant ANOVA o un t-test, comprovar la normalitat i l’homocedasticitat ajuda a decidir si els resultats són fiables. Però si tens dubtes o el resultat és justet, pots reforçar-ho fent un test no paramètric com el kruskal.test().