# Classe 18/02/2021
# Estadística, FME, presencial, curs 2020-21, 2n semestre

library(car)
library(RcmdrMisc)

source("feb16.R")

# "El data frame és una generalització de la matriu."
# Matriu: tots els elements han de ser del mateix tipus.
# Data frame: no té per què, cada columna pot ser de diferent tipus.

# Pregunta: podem tenir un vector però que admeti diversos elements de tipus
# diferents?
# SÍ! Es diu "llista".
aaa = table(dd$MO)
aaa

bbb = table(dd$PC, dd$Sexe)
bbb

ccc = matrix((1:24), nrow=6, ncol=4)
ccc

ddd = c(3>2, 3>10, 2==4)
ddd

prova = list(a=aaa, b=bbb, ccc, ddd, dd$Edat)
prova

# str serveix per mostrrar l'estructura (str ~= structure):
str(prova)

# Per comprovar si un objecte és d'un tipus concret:
is.matrix(aaa)
is.integer(ddd)
is.logical(ddd)

# També es poden convertir els objectes. Ex: mirar com fer-ho (la instrucció és
# semblant a as.matrix)

# Per no haver de ficar |dd| tota l'estona, podem usar |with|
with(dd, plot(H, Pes))
with(dd, cor(H, Pes))

## == BLOC 3 - ANÀLISI DESCRIPTIVA BIVARIANT ==
# Apartat 1.a)
scatterplot(Pes~H, data=dd)
scatterplot(Pes~H, data=dd, smooth=F, box=F)
scatterplot(BMI~Edat, data=dd, smooth=F, box=F)
cor(dd[,c("Pes", "H", "BMI", "Edat")])

# Apartat 1.b)
SQ = function(ab) {
  sum((dd$Pes - ab[1] - ab[2]*dd$H)^2)
}

s1 = nlm(SQ, c(1, 0), hessian=T)
s1
det(s1$hessian)

s2 = optim(c(2, 3), SQ, hessian=T)
s2

s1$estimate
s2$par
scatterplot(Pes~H, data=dd, smooth=F, box=F)
abline(s1$estimate, col="orange")
abline(s2$par, col="red")

# Apartat 2
by(dd$H, dd$Sexe, summary)
by(dd$Pes, dd$Sexe, summary)
by(dd$D2, dd$Sexe, summary)
scatterplot(Pes~H|Sexe, data=dd, smooth=F, box=F)
scatterplot(BMI~Edat|Sexe, data=dd, smooth=F, box=F)
scatterplot(D2~H|Sexe, data=dd, smooth=F, box=F)
with(dd, Barplot(MO, by=Sexe, style="divided", legend.pos="above", xlab="MO", ylab="Frequencia"))
with(dd, Barplot(Sexe, by=MO, style="divided", legend.pos="above", xlab="MO", ylab="Frequencia"))
with(dd, Barplot(Sexe, by=MO, style="parallel", legend.pos="above", xlab="MO", ylab="Frequencia"))
with(dd, Barplot(Sexe, by=MO, style="parallel", legend.pos="above", xlab="MO", ylab="Frequencia", scale="percent"))
plot(table(dd$MO, dd$Sexe))
plot(table(dd$MO, dd$Sexe), ylab="Sexe", main="Sexe")
