Ejercicio 1

Primeramente, leemos el fichero indicado para comenzar el ejercicio

dieta <-read.table("dieta.csv", sep = ";",
head = TRUE )

A/Convertimos en factores las variables “tipoDiet” y “genero”

dieta$tipoDiet <- factor(dieta$tipoDiet)
dieta$edad <- factor(dieta$edad)

B/ Para determinar la media de la variable “peso0” según el peso, usaremos el ANOVA de una vía que examina la igualdad de las medias de la población para un resultado cuantitativo y una única variable categórica con dos o más niveles.

Como pasos previos, comprobamos tanto normalidad como hocedasticidad (la cual es robusta al estar los datos balanceados). La normalidad (en cada nivel) se comprobará por medio del shapiro test y la homocedasticidad por el de fligner.

shapiro.test( dieta$peso0[dieta$edad == 1])#p-value = 0.1022
## 
##  Shapiro-Wilk normality test
## 
## data:  dieta$peso0[dieta$edad == 1]
## W = 0.853, p-value = 0.1022
shapiro.test( dieta$peso0[dieta$edad == 2])#p-value = 0.06038
## 
##  Shapiro-Wilk normality test
## 
## data:  dieta$peso0[dieta$edad == 2]
## W = 0.83071, p-value = 0.06038
shapiro.test( dieta$peso0[dieta$edad == 3])#p-value = 0.4849
## 
##  Shapiro-Wilk normality test
## 
## data:  dieta$peso0[dieta$edad == 3]
## W = 0.92652, p-value = 0.4849

No son significativos por lo que se acepta la normalidad. Seguimos con la homocedasticidad.

fligner.test( peso0 ~ edad, data = dieta) #p-value = 0.6562
## 
##  Fligner-Killeen test of homogeneity of variances
## 
## data:  peso0 by edad
## Fligner-Killeen:med chi-squared = 0.84251, df = 2, p-value =
## 0.6562

ANOVA de una vía

fitdieta <- aov( peso0 ~ edad, data = dieta )
summary(fitdieta)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## edad         2   2544  1272.0   13.46 0.000173 ***
## Residuals   21   1985    94.5                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Si hay diferencias (0,000173< 0,05), ahora vamos a ver entre cuales. Usaremos el ajuste “holm”.

pairwise.t.test( dieta$peso0, dieta$edad, p.adj = "holm", paired = TRUE)
## 
##  Pairwise comparisons using paired t tests 
## 
## data:  dieta$peso0 and dieta$edad 
## 
##   1      2     
## 2 0.1584 -     
## 3 0.0004 0.0137
## 
## P value adjustment method: holm

Observamos como el 3 tanto con el 1 y el 2 el “p-valor” es inferrior a 0,05 por tanto esos si que difieren entre ellos

C/Comprueba si hay diferencias significativas en el peso final (peso2) según la interacción del grupo de edad al que pertenece el sujeto y el tipo de dieta al que se somete. Usaremos un ANOVA de 2 vías

Factores entre sujetos: edad y tipoDiet

Variable dependiente: peso2

Igual que antes, comprobamos normalidad y homocedasticidad antes de hacer el ANOVA

shapiro.test( dieta$peso0[dieta$edad == 1])#p-value = 0.1022
## 
##  Shapiro-Wilk normality test
## 
## data:  dieta$peso0[dieta$edad == 1]
## W = 0.853, p-value = 0.1022
shapiro.test( dieta$peso0[dieta$edad == 2])#p-value = 0.06038
## 
##  Shapiro-Wilk normality test
## 
## data:  dieta$peso0[dieta$edad == 2]
## W = 0.83071, p-value = 0.06038
shapiro.test( dieta$peso0[dieta$edad == 3])#p-value = 0.4849
## 
##  Shapiro-Wilk normality test
## 
## data:  dieta$peso0[dieta$edad == 3]
## W = 0.92652, p-value = 0.4849
shapiro.test( dieta$peso0[dieta$tipoDiet == 1])#p-value = 0.9942
## 
##  Shapiro-Wilk normality test
## 
## data:  dieta$peso0[dieta$tipoDiet == 1]
## W = 0.98948, p-value = 0.9942
shapiro.test( dieta$peso0[dieta$tipoDiet == 2])#p-value = 0.9404
## 
##  Shapiro-Wilk normality test
## 
## data:  dieta$peso0[dieta$tipoDiet == 2]
## W = 0.97599, p-value = 0.9404
shapiro.test( dieta$peso0[dieta$tipoDiet == 3])#p-value = 0.4412
## 
##  Shapiro-Wilk normality test
## 
## data:  dieta$peso0[dieta$tipoDiet == 3]
## W = 0.92138, p-value = 0.4412

No son significativos por lo que se acepta la normalidad. Seguimos con la homocedasticidad

fligner.test( peso0 ~ edad, data = dieta) #p-value = 0.6562
## 
##  Fligner-Killeen test of homogeneity of variances
## 
## data:  peso0 by edad
## Fligner-Killeen:med chi-squared = 0.84251, df = 2, p-value =
## 0.6562
fligner.test( peso0 ~ tipoDiet, data = dieta) #p-value = 0.1445
## 
##  Fligner-Killeen test of homogeneity of variances
## 
## data:  peso0 by tipoDiet
## Fligner-Killeen:med chi-squared = 3.8689, df = 2, p-value = 0.1445

ANOVA de 2 vías, no importa el oden porque los datos están balanceados:

table(dieta$edad)
## 
## 1 2 3 
## 8 8 8
table(dieta$tipoDiet)
## 
## 1 2 3 
## 8 8 8

ANOVA de 2 vías

fitdieta2 <- aov( peso0 ~ edad * tipoDiet, data = dieta )
summary(fitdieta2)
##               Df Sum Sq Mean Sq F value   Pr(>F)    
## edad           2 2544.1  1272.0  14.026 0.000368 ***
## tipoDiet       2  151.6    75.8   0.836 0.452712    
## edad:tipoDiet  4  473.3   118.3   1.305 0.312775    
## Residuals     15 1360.4    90.7                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Podemos observar como la edad tiene un efecto significativo, la dieta no lo es y no hay interacción entre ambas.

Seguimos con la gráfica

interaction.plot( dieta$edad, dieta$tipoDiet, dieta$peso0,
ylim = c( 10, 200 ),
col = c( "red", "blue" ),
lty = c( 1, 12 ),
lwd = 3,
ylab = "peso antes",
xlab = "edad", trace.label = "genero" )

##D/ Comprueba si la media de los pesos difieren dependiendo del momento de la dieta que se esté.Para esto último haremos el ANOVA de medidas repetidas

Primero reestructuramos el data frame con la función “melt” del paquete “reshape2”.

library( reshape2 )
dietaRe <- melt( dieta, id = c( "id", "edad", "tipoDiet" ),
                measure = c( "peso0", "peso1", "peso2" ),
                variable.name = "MOM.DIETA", 
                value.name = "PESOS" )
head( dietaRe )
##   id edad tipoDiet MOM.DIETA     PESOS
## 1  1    3        1     peso0 122.01756
## 2  2    3        1     peso0 140.86780
## 3  3    2        3     peso0 110.52651
## 4  4    2        3     peso0 120.74844
## 5  5    1        1     peso0  82.73085
## 6  6    2        1     peso0 118.06524

Ahora comprobamos la normalidad

shapiro.test( dietaRe$PESOS[dietaRe$MOM.DIETA == "peso0"])#p-value = 0.9144
## 
##  Shapiro-Wilk normality test
## 
## data:  dietaRe$PESOS[dietaRe$MOM.DIETA == "peso0"]
## W = 0.98105, p-value = 0.9144
shapiro.test( dietaRe$PESOS[dietaRe$MOM.DIETA == "peso1"])#p-value = 0.7012
## 
##  Shapiro-Wilk normality test
## 
## data:  dietaRe$PESOS[dietaRe$MOM.DIETA == "peso1"]
## W = 0.97138, p-value = 0.7012
shapiro.test( dietaRe$PESOS[dietaRe$MOM.DIETA == "peso2"])#p-value = 0.4417
## 
##  Shapiro-Wilk normality test
## 
## data:  dietaRe$PESOS[dietaRe$MOM.DIETA == "peso2"]
## W = 0.96016, p-value = 0.4417

Si hay normalidad. seguimos con el ezANOVA

library(ez)
options( contrasts = c( "contr.sum", "contr.poly" ) )
ezANOVA( data = dietaRe, dv = PESOS,
wid = id, within = MOM.DIETA, 
type = 3 )
## Warning: Converting "id" to factor for ANOVA.
## $ANOVA
##      Effect DFn DFd        F            p p<.05       ges
## 2 MOM.DIETA   2  46 9.007468 0.0004999883     * 0.2143998
## 
## $`Mauchly's Test for Sphericity`
##      Effect         W         p p<.05
## 2 MOM.DIETA 0.9348576 0.4766505      
## 
## $`Sphericity Corrections`
##      Effect       GGe        p[GG] p[GG]<.05      HFe        p[HF]
## 2 MOM.DIETA 0.9388416 0.0006806327         * 1.019405 0.0004999883
##   p[HF]<.05
## 2         *

El test de Mauchly nos da un p-valor = 0.4766 > 0.05, es decir, acepta la hipótesis nula y podemos asumir la esfericidad y nos fijariamos ne le p-value del ANOVA (0.0004999883)

EJERCICIO 2

Leemos el fichero correspondiente para hacer la tarea:

william <-read.table("william.csv", sep = ";",
head = TRUE )

A/ calculamos la normalidad de “salario”

shapiro.test( william$salario )
## 
##  Shapiro-Wilk normality test
## 
## data:  william$salario
## W = 0.93541, p-value = 0.3281

Tras quedar comprobada la normalidad, seguimso con la correlación entre “salario” y “ausencias”

cor.test(william$salario,william$ausencias)
## 
##  Pearson's product-moment correlation
## 
## data:  william$salario and william$ausencias
## t = -7.4737, df = 13, p-value = 4.672e-06
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.9668476 -0.7211085
## sample estimates:
##        cor 
## -0.9006674

Correlación positiva (0,90)

B/ Después nos disponemos a hacer el ajuste del modelo

modelo <- lm(ausencias ~ salario, data = william)
summary(modelo)
## 
## Call:
## lm(formula = ausencias ~ salario, data = william)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -9.516 -3.053  1.428  2.961  5.475 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  47.6002     3.0789  15.460 9.50e-10 ***
## salario      -3.0094     0.4027  -7.474 4.67e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.294 on 13 degrees of freedom
## Multiple R-squared:  0.8112, Adjusted R-squared:  0.7967 
## F-statistic: 55.86 on 1 and 13 DF,  p-value: 4.672e-06

Con ello obtenemos que la recta de regresión es “ausencias=47,6002-3,0094*salario"

C/Bondad del ajuste.

anova(modelo)
## Analysis of Variance Table
## 
## Response: ausencias
##           Df  Sum Sq Mean Sq F value    Pr(>F)    
## salario    1 1030.01 1030.01  55.857 4.672e-06 ***
## Residuals 13  239.72   18.44                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

F es mayor que 1, lo que indica un buen ajuste. SSM=1030,01 (la regresión es muy diferente de la media y significa que se ha hecho una gran mejora a la hora de predecir la variable dependiente) y SSR=239,72

D/ Para terminar, realizamos el diagnóstico del modelo (normalidad de los residuos, homogeneidad de varianzas e incorrelación de los residuos).

Antes de eso los asignamos

william$fitted.modelo <- fitted( modelo ) 
william$residuals.modelo <- residuals( modelo )
william$rstudent.modelo <- rstudent( modelo )

Normalidad

shapiro.test(william$rstudent.modelo)
## 
##  Shapiro-Wilk normality test
## 
## data:  william$rstudent.modelo
## W = 0.91538, p-value = 0.1637

Homocedasticidad

library(lmtest)
## Warning: package 'lmtest' was built under R version 3.3.3
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
bptest(modelo)#p-value=0,467 
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo
## BP = 0.52916, df = 1, p-value = 0.467

Se acepta homocedasticidad

Incorrelacción

dwtest(ausencias ~ salario, alternative = "two.sided", data = william)#p-value = 0.3763
## 
##  Durbin-Watson test
## 
## data:  ausencias ~ salario
## DW = 2.452, p-value = 0.3763
## alternative hypothesis: true autocorrelation is not 0

Aceptamos incorrelación de los residuos