# Classe 16/02/2021
# Estadística, FME, presencial, curs 2020-21, 2n semestre

library(tables)
library(RcmdrMisc)

# Conversió de dades
dd = read.csv2("Enquesta.csv")
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


# Apartats 1 i 2
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"))
head(dd)

# Apartat 3
summary(dd$Edat)
mean(dd$Edat, trim=.1)
boxplot(dd$Edat)

boxplot(dd$Pes)
boxplot(dd$H)
boxplot(dd$D2)

tsexe = table(dd$Sexe)
tsexe
barplot(tsexe)

tmo = table(dd$MO)
tmo
barplot(tmo)

tvidre = table(dd$Vidre)
tvidre
barplot(tvidre)

tenvas = table(dd$Envas)
tenvas
barplot(tenvas)

tpc = table(dd$PC)
tpc
barplot(tpc)

taspecte = table(dd$Aspecte)
taspecte
barplot(taspecte)

# Apartat 4
boxplot(dd$BMI)
abline(h=c(19, 27))

# Apartat 5
hist(dd$Pes, freq=F, ylim=c(0, 0.04), xlim=c(30, 130))
curve(dnorm(x, mean=mean(dd$Pes), sd=sd(dd$Pes)), add=T)

boxplot(dd$IM)

# == BLOC 2 - ANÀLISI DESCRIPTIVA ==
# Apartat 1
# Tabular:
#   ~: Separa files i columnes
#   +: Concatena
#   *: Nesting
tabular(mean*(Sexe+1)~H*(CBMI+1), dd)
tabular(var*Sexe~H*CBMI, dd)
interaction.plot(dd$CBMI, dd$Sexe, dd$H)
plotMeans(dd$H, dd$CBMI, dd$Sexe, error.bars="sd")
