diff --git a/entregables/ent1/ent1.Rmd b/entregables/ent1/ent1.Rmd
new file mode 100644
index 0000000..0c40cc3
--- /dev/null
+++ b/entregables/ent1/ent1.Rmd
@@ -0,0 +1,276 @@
+---
+title: "Entregable 1 - Estadística"
+subtitle: "Grau de Matemàtiques, Curs 2020-21"
+author: "Vilanova Martínez, Adrià"
+output: html_document
+---
+
+```{r}
+library(tables)
+```
+
+## Configuració
+Aquí es pot configurar la pràctica depenent del que es pregunti:
+
+```{r}
+# Columna per la qual es pregunta a l'apartat a):
+colA = "IM"
+# Tractament dels exercicis 1 i 2 de l'apartat a):
+tractamentA = "M-Jove"
+# Columna per la qual es pregunta a l'apartat b):
+colB = "H"
+# Tractament que s'usa a l'apartat b):
+tractamentB = "M-Jove"
+# Mu a les preguntes 8, 9 i 10
+mu8 = 170.9
+# Probabilitat de les preguntes 8, 9 i 10
+prob8 = 0.95
+# Sigma^2 a les preguntes 11, 12 i 13
+sigmaQuad11 = 66.3
+# Probabilitat de les preguntes 11, 12 i 13
+prob11 = 0.95
+# Categoria d'Aspecte preguntada a l'apartat c):
+aspC = "F"
+# Columna per la qual es pregunta a l'apartat c):
+colC = "Vidre"
+# Resposta a la columna anterior de l'apartat c):
+respC = "No"
+
+dd = read.csv2("data.csv")
+```
+
+## Tractament previ
+```{r}
+# Conversió de dades
+dd$MO = factor(dd$MO, labels=c("No", "Sí"))
+dd$Envas = factor(dd$Envas, labels=c("No", "Sí"))
+dd$Vidre = factor(dd$Vidre, labels=c("No", "Sí"))
+dd$Sexe = factor(dd$Sexe)
+dd$Aspecte = factor(dd$Aspecte)
+dd$IM = dd$D2/dd$D4
+dd$BMI = dd$Pes/(dd$H/100)^2
+dd$CBMI = cut(dd$BMI, c(0, 19, 27, 100), labels=c("1-Baix", "2-Mig", "3-Alt"))
+dd$CEdat = cut(dd$Edat, c(-1, 25, 200), labels=c("1-Jove", "2-Gran"))
+
+# Definim els data frames per cada tractament (combinació)
+fj = dd[dd$Sexe == 'F' & dd$CEdat == "1-Jove",]
+fg = dd[dd$Sexe == 'F' & dd$CEdat == "2-Gran",]
+mj = dd[dd$Sexe == 'M' & dd$CEdat == "1-Jove",]
+mg = dd[dd$Sexe == 'M' & dd$CEdat == "2-Gran",]
+tractaments = list(fj, fg, mj, mg)
+names(tractaments) = c("F-Jove", "F-Gran", "M-Jove", "M-Gran")
+```
+
+## Apartat a)
+```{r}
+# Creem data frame amb informació d'estadístics de colA per cada
+# tractament
+colAPerTractament = data.frame(
+  "Tractament" = names(tractaments),
+  "Mean" = c(mean(fj[[colA]]), mean(fg[[colA]]), mean(mj[[colA]]), mean(mg[[colA]])),
+  "Var" = c(var(fj[[colA]]), var(fg[[colA]]), var(mj[[colA]]), var(mg[[colA]]))
+)
+colAPerTractament
+
+# TODO(avm99963): Fix
+# with(dd, tabular(Sexe~colA*CEdat*(mean + var)))
+```
+
+Variables usades a l'apartat:
+
+- `tractamentA = `r tractamentA``
+- `colA = `r colA``
+
+### Pregunta 1
+La mitjana de ``r colA`` en el tractament ``r tractamentA`` és:
+
+```{r}
+mean(tractaments[[tractamentA]][[colA]])
+```
+
+### Pregunta 2
+La variància de ``r colA`` en el tractament ``r tractamentA`` és:
+
+```{r}
+var(tractaments[[tractamentA]][[colA]])
+```
+
+### Pregunta 3
+El tractament en què ``r colA`` ha donat més alt és:
+
+```{r}
+colAPerTractament[which.max(colAPerTractament$Mean), "Tractament"]
+```
+
+### Pregunta 4
+El tractament en què ``r colA`` ha sortit amb més dispersió és:
+
+```{r}
+colAPerTractament[which.max(colAPerTractament$Var), "Tractament"]
+```
+
+### Pregunta 5
+El sexe en què la diferència de ``r colA`` entre Joves i Grans ha sortit més alta és:
+
+```{r}
+# Diferència de la colA entre joves i grans:
+colADiff1 = data.frame(
+  Sexe = c("F", "M"),
+  Diff = c(
+    abs(mean(fj[[colA]]) - mean(fg[[colA]])),
+    abs(mean(mj[[colA]]) - mean(mg[[colA]]))
+  )
+)
+
+colADiff1
+colADiff1[which.max(colADiff1$Diff), "Sexe"]
+```
+
+### Pregunta 6
+El grup d'edat en què la diferència de ``r colA`` entre sexes ha sortit més alta és:
+
+```{r}
+# Diferència de la colA entre sexes:
+colADiff2 = data.frame(
+  Edat = c("1-Jove", "2-Gran"),
+  Diff = c(
+    abs(mean(fj[[colA]]) - mean(mj[[colA]])),
+    abs(mean(fg[[colA]]) - mean(mg[[colA]]))
+  )
+)
+
+colADiff2
+colADiff2[which.max(colADiff1$Diff), "Edat"]
+```
+
+## Apartat b)
+
+Variables usades a l'apartat:
+
+- `colB = `r colB``
+- `tractamentB = `r tractamentB``
+
+### Pregunta 7
+Mitjana de ``r colB`` per les persones del segment ``r tractamentB``:
+
+```{r}
+m7 = mean(tractaments[[tractamentB]][[colB]])
+m7
+```
+
+### Pregunta 8
+Suposant que $\mu = \mathbb{E}[`r colB` | \text{`r tractamentB`}] = `r mu8`$, quins serien els resultats normals (dues cues, probabilitat = 0.95) de la mitjana de ``r colB`` del segment ``r tractamentB``? Doneu-ne els extrems de l'interval (valors crítics):
+
+```{r}
+nb = nrow(tractaments[[tractamentB]])
+sd8 = sd(tractaments[[tractamentB]][[colB]])
+probcua8 = (1 - prob8)/2
+extesq = mu8 + qt(probcua8, df=nb-1)*sd8/sqrt(nb)
+extdre = mu8 + qt(1 - probcua8, df=nb-1)*sd8/sqrt(nb)
+```
+
+Els resultats normals són $[`r extesq`, `r extdre`]$.
+
+### Pregunta 9
+Continuant el dos punts anteriors (7 i 8), quina és la probabilitat que la mitjana $\text{`r colB`} | \text{`r tractamentB`}$ surti tant o més estranya del que ha sortit?
+
+```{r}
+p9 = 2*(1 - pt(abs(m7 - mu8)*sqrt(nb)/sd8, df=nb-1))
+```
+
+La probabilitat és `r p9`.
+
+### Pregunta 10
+Calculeu la variància de ``r colB`` per les persones del segment ``r tractamentB``:
+
+```{r}
+var10 = var(tractaments[[tractamentB]][[colB]])
+var10
+```
+
+### Pregunta 11
+Suposant que $\sigma^2 = V(`r colB` | \text{`r tractamentB`}) = `r sigmaQuad11`$, quins serien els resultats normals (dues cues, probabilitat = ``r prob11``) de la variància de ``r colB`` del segment ``r tractamentB``? Doneu-ne els valors crítics.
+
+```{r}
+mean11 = mean(tractaments[[tractamentB]][[colB]])
+probcua11 = (1 - prob11)/2
+extesq2 = qchisq(probcua11, df=nb-1)*sigmaQuad11/(nb - 1)
+extdre2 = qchisq(1 - probcua11, df=nb-1)*sigmaQuad11/(nb - 1)
+```
+
+Els resultats normals són $[`r extesq2`, `r extdre2`]$.
+
+### Pregunta 12
+Continuant els dos punts anteriors (10 i 11), quina és la probabilitat que la variància $S^2$ de ``r tractamentB`` surti tant o més estranya del que ha sortit?
+
+```{r}
+c12 = (nb - 1)/sigmaQuad11
+delta12 = abs(var10 - sigmaQuad11)
+p12 = pchisq(c12*(sigmaQuad11 - delta12), df=nb-1) +
+      pchisq(c12*(sigmaQuad11 + delta12), df=nb-1, lower.tail = FALSE)
+```
+
+La probabilitat és `r p12`.
+
+## Apartat c)
+
+Variables usades a l'apartat:
+
+- `aspC = `r aspC``
+- `colC = `r colC``
+- `respC = `r respC``
+
+<!-- TODO(avm99963): Give direct results instead of tables -->
+
+### Pregunta 13
+De les persones que han respost l'opció ``r aspC`` d'Aspecte, quina proporció (tant per u) ha dit: ``r respC`` a ``r colC``?
+
+```{r}
+dd13 = dd[dd$Aspecte == aspC,]
+pt13 = prop.table(table(dd13[[colC]]))
+pt13
+
+pt13[["No"]]
+```
+
+### Pregunta 14
+En quina opció d'Aspecte, les proporcions de "Sí" i de "No" a ``r colC`` són més diferents?
+
+```{r}
+pt14 = prop.table(table(dd$Aspecte, dd[[colC]]), margin=1)
+pt14
+
+diff14 = data.frame(
+  Aspecte = c("E", "F", "M", "T"),
+  Diff = c(
+    abs(pt14["E", "No"] - pt14["E", "Sí"]),
+    abs(pt14["F", "No"] - pt14["F", "Sí"]),
+    abs(pt14["M", "No"] - pt14["M", "Sí"]),
+    abs(pt14["T", "No"] - pt14["T", "Sí"])
+  )
+)
+diff14
+
+diff14[which.max(diff14$Diff), "Aspecte"]
+```
+
+### Pregunta 15
+En quina opció d'Aspecte, les proporcions de "Sí" i de "No" a ``r colC`` s'assemblen més a les proporcions de "Sí" i "No" de totes les persones juntes?
+
+```{r}
+pt15 = prop.table(table(dd[[colC]]))
+pt15
+
+diff15 = data.frame(
+  Aspecte = c("E", "F", "M", "T"),
+  Diff = c(
+    abs(pt14["E", "No"] - pt15[["No"]]),
+    abs(pt14["F", "No"] - pt15[["No"]]),
+    abs(pt14["M", "No"] - pt15[["No"]]),
+    abs(pt14["T", "No"] - pt15[["No"]])
+  )
+)
+diff15
+
+diff15[which.min(diff15$Diff), "Aspecte"]
+```
\ No newline at end of file
