# Cargo de librerias
library(ggplot2)
library(tidyverse)
library(dplyr)
library(gridExtra)
# lectura de la base
data = read.csv("GTL.csv")
head(data)
Se presentan estadísticos resumen de la variable Light con respecto al factor Glass:
# Estadísticos con respecto al factor Glass.
by(data$Light, data$Glass, summary)
## data$Glass: A
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 568 580 1087 1015 1380 1392
## ------------------------------------------------------------
## data$Glass: B
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 530 579 1035 967 1299 1328
## ------------------------------------------------------------
## data$Glass: C
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 546.0 599.0 889.0 838.2 1045.0 1066.0
# Desviación estandar con respecto al factor Glass.
by(data$Light, data$Glass, sd)
## data$Glass: A
## [1] 356.3289
## ------------------------------------------------------------
## data$Glass: B
## [1] 333.784
## ------------------------------------------------------------
## data$Glass: C
## [1] 212.2527
De estos resultados se observa lo siguiente:
El mínimo valor que toma la variable Light con respecto al factor Glass es 568 unidades en el nivel A. Mientras que, El máximo valor que toma la variable Light es con respecto al factor Glass 1392 unidades. Además, en el nivel B dicha variable toma un valor mínimo de 530 unidades y un valor máximo de 1328 unidades. También, dicha variable con respecto al nivel C del factor Glass toma valores de mínimo y máximo de 546.0 y 1066.0 unidades respectivamente.
Se observa que la media de la variable Light a un nivel A del factor Glass es de 1015 unidades y su mediana es 1087 unidades. Mientras que, la media de dicha variable con respecto a un nivel B es de 967 unidades y su mediana es de 1035 unidades. Por otro lado, la media de la variable a un nivel C es 838.2 unidades y su mediana es 889 unidades.
La desviación estándar con respecto la variable Light con respecto al factor Glass es 356.3289 unidades en el nivel A. Mientras que, en el nivel B la desviación estándar de variable light es de 333.784 unidades. También, en el nivel C, la desviación estándar de dicha variable fue de 212.2527 unidades.
# Estadísticos con respecto al factor Temp.
by(data$Light, data$Temp, summary)
## data$Temp: 100
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 530.0 550.0 570.0 566.3 579.0 599.0
## ------------------------------------------------------------
## data$Temp: 125
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1000 1045 1066 1059 1085 1090
## ------------------------------------------------------------
## data$Temp: 150
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 867 904 1312 1195 1380 1392
# Desviación estandar con respecto al factor Glass.
by(data$Light, data$Temp, sd)
## data$Temp: 100
## [1] 20.93442
## ------------------------------------------------------------
## data$Temp: 125
## [1] 29.32576
## ------------------------------------------------------------
## data$Temp: 150
## [1] 233.8829
De estos resultados se observa lo siguiente:
El mínimo valor que toma la variable Light con respecto al factor Temp es 530.0 unidades en el nivel 100. Mientras que, El máximo valor que toma la variable Light es con respecto al factor Temp 599.0 unidades. Además, en el nivel 125 dicha variable toma un valor mínimo de 1000 unidades y un valor máximo de 1090 unidades. También, dicha variable con respecto al nivel 130 del factor Temp toma valores de mínimo y máximo de 867 y 1392 unidades respectivamente.
Se observa que la media de la variable Light a un nivel 100 del factor Temp es de 566.3 unidades y su mediana es 570.0 unidades. Mientras que, la media de dicha variable con respecto a un nivel 115 es de 1059 unidades y su mediana es de 1066 unidades. Por otro lado, la media de la variable a un nivel 130 es 1195 unidades y su mediana es 1312 unidades.
La desviación estándar con respecto la variable Light con respecto al factor Temp es 20.93442 unidades en el nivel 100. Mientras que, en el nivel 115 la desviación estándar de variable Temp es de 29.32576 unidades. También, en el nivel 130, la desviación estándar de dicha variable fue de 233.8829 unidades.
# Mediana por ambos factores.
tapply(data$Light, list(data$Glass, data$Temp), median)
## 100 125 150
## A 570 1087 1386
## B 550 1035 1312
## C 575 1053 889
# Media por ambos factores.
tapply(data$Light, list(data$Glass, data$Temp), mean)
## 100 125 150
## A 572.6667 1087.333 1386.0000
## B 553.0000 1035.000 1313.0000
## C 573.3333 1054.667 886.6667
De las tablas se puede observar que, la media y la mediana de las interacciones, respecto al valor de la variable Light no varía significativamente, lo cual puede implicar que la desviación en sus observaciones no varía demasiado.
También se puede evidenciar que, el tipo de Glass B y el tipo de Temp 100 es quien presenta menores valores tanto en la media como en la mediana.
Se realiza un gráfico comparativo de cajas y bigotes con los promedios para los datos crudos:
ggplot(data, aes(y=Light, x=Temp, fill = Glass,)) + ggtitle(
"Bosplot entre las variables Light, Glass y Temp") +
geom_boxplot() +
stat_summary(aes(y=Light, x=Temp),
fun=mean, geom="point", shape=20,
size=4, color="green", position = position_dodge(0.75))
Se observa que existe una ampli
Adicionalmente, se presentan gráficos individuales entre la variable Light y el factor Glass, así como de la Light y el factor Temp.
ggplot(data, aes(y=Light, x=Glass, fill = Glass)) + ggtitle(
"Bosplot entre las variables Light y Glass") +
geom_boxplot() +
stat_summary(aes(y=Light, x=Glass),
fun=mean, geom="point", shape=20,
size=4, color="green", position = position_dodge(0.75))
data$Temp <- as.factor(data$Temp)
ggplot(data, aes(y=Light, x=Temp, fill = Temp)) + ggtitle(
"Bosplot entre las variables Light y Temp") +
geom_boxplot() +
stat_summary(aes(y=Light, x=Temp),
fun=mean, geom="point", shape=20,
size=4, color="green", position = position_dodge(0.75))
Se realiza un gráfico de lineas que conecta los promedios de la variable Light con respecto a los factores Glass y Temp.
ggplot(data2, aes(y = dat,x = fac2)) +
geom_line(aes(y = dat, group = fac1, color = fac1)) +
geom_point(aes(y = dat, group = fac1, color = fac1)) +
ggtitle("Grafico de medias.") +
xlab("Glass.") +
ylab("Temp.") +
labs(color = "Glass.")
Del gráfico de los box-plot por cada factor, se puede evidenciar que, para la varibale temp el tipo de temperatura 150 presenta una mayor variación en sus observaciones con respecto a las demás, igual, se videncia que para los otros dos tipos de tempratura, su media es muy similar a su mediana. Para la varibale Glass se puede observar que para cada uno de los factores, indican las observaciones una variabilidad alta, y que la mediana se comporta similiar a su media.
se implementa un modelo ANOVA a los datos crudos en R de la siguiente manera:
anova = aov(data = data, Light ~ Glass + Temp + (Glass*Temp) )
summary(anova)
## Df Sum Sq Mean Sq F value Pr(>F)
## Glass 2 150865 75432 206.4 3.89e-13 ***
## Temp 2 1970335 985167 2695.3 < 2e-16 ***
## Glass:Temp 4 290552 72638 198.7 1.25e-14 ***
## Residuals 18 6579 366
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Además, se verifican los supuestos de dicho modelo.Primero de manera gráfica:
par(mar = c(2, 1, 1, 1))
par(mfrow=c(2,2))
plot(anova)
Se observa gráficamente como, los datos no presentan normalidad, ya que cuenta con colas muy pesadas, las cuales hacen que en su mayoría los datos no se apeguen a la recta de normalidad. Por otro lado, analizando el gráfico de residuales contra los valores ajustados, se aprecian rachas de puntos, por lo cual se concluye que dichos datos tampoco cumplen con el supuesto de varianza constante.
Adicionalmente, se realizan test de normalidad y de varianza constante en R de la siguiente forma:
shapiro.test(data$Light)
##
## Shapiro-Wilk normality test
##
## data: data$Light
## W = 0.87975, p-value = 0.004745
Primeramente, se hallan los rangos de la variable Light:
light_rank = rank(data$Light)
Luego, se implementa un modelo ANOVA a dichos rangos en R de la siguiente manera:
anova_rank = aov(light_rank~ data$Glass + data$Temp + (data$Glass*data$Temp))
summary(anova_rank)
## Df Sum Sq Mean Sq F value Pr(>F)
## data$Glass 2 180.7 90.3 21.39 1.75e-05 ***
## data$Temp 2 1134.0 567.0 134.29 1.52e-11 ***
## data$Glass:data$Temp 4 247.3 61.8 14.64 1.73e-05 ***
## Residuals 18 76.0 4.2
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Se observa como los resultados de modelo ajustado, tanto para los datos en crudos, así como para los rangos de dichos datos, difieren en sus valores Mean Sq, F value, Pr(>F) y demás. Lo cual muestra que, dado que no se cumplen los supuestos de normalidad y varianza constante, la ANOVA de una vía no es invariante ante transformaciones.
Ahora, se realiza un gráfico de cajas y bigotes sobre los rangos de los datos y se compara con el anterior bosplot de los datos crudos:
# Gráfico con rangos.
ggplot(data, aes(y = rank(Light), x = as.factor(Temp), fill = Glass ))+
geom_boxplot() +
stat_summary(aes(y = rank(Light), x = as.factor(Temp)),
fun = mean, geom = "point", shape = 20,
size = 4, color = "green", position = position_dodge(0.75)) +
ggtitle("Light por Glass y Temp. con rangos.") +
xlab("Temp.")+
ylab("Light")
Inicialmente, se calculan los efectos relativos de los rangos de los datos, se calculan en R así:
# calculo de rango promedio por cada muestra
EfectoRel = (1/(nrow(data)))*(light_rank - 0.5)
EfectoRel
## [1] 0.27777778 0.12962963 0.16666667 0.09259259 0.01851852 0.24074074
## [7] 0.05555556 0.20370370 0.31481481 0.75925926 0.72222222 0.68518519
## [13] 0.64814815 0.50000000 0.46296296 0.53703704 0.57407407 0.61111111
## [19] 0.98148148 0.90740741 0.94444444 0.87037037 0.83333333 0.79629630
## [25] 0.35185185 0.42592593 0.38888889
Posteriormente, se implementa un modelo ANOVA a dichos efectos relativos en R de la siguiente manera:
anova_efect = aov(EfectoRel~ data$Glass + data$Temp + (data$Glass*data$Temp))
summary(anova_efect)
## Df Sum Sq Mean Sq F value Pr(>F)
## data$Glass 2 0.2478 0.1239 21.39 1.75e-05 ***
## data$Temp 2 1.5556 0.7778 134.29 1.52e-11 ***
## data$Glass:data$Temp 4 0.3393 0.0848 14.64 1.73e-05 ***
## Residuals 18 0.1043 0.0058
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Se observa como los resultados de modelo ajustado, tanto para los rangos de los datos en crudos, así como para los efectos relativos de dichos datos, presentan los mismos valores Mean Sq, F value, Pr(>F) y demás. Lo cual muestra que, dado que con la metodologia no paramétrica sin importar que no se cumplan los supuestos de normalidad y varianza constante, se mantiene la consistencia de los resultados arrojados por el ANOVA.
Ahora, se realiza un gráfico de cajas y bigotes sobre los efectos de los rangos de los datos en crudo:
# Gráfico con efectos relativos.
ggplot(data, aes(y = EfectoRel, x = as.factor(Temp), fill = Glass ))+
geom_boxplot() +
stat_summary(aes(y = EfectoRel, x = as.factor(Temp)),
fun = mean, geom = "point", shape = 20,
size = 4, color = "green", position = position_dodge(0.75)) +
ggtitle("Light por Glass y Temp. con efectos relativos.") +
xlab("Temp.")+
ylab("Light")
Se realiza un gráfico comparativo de cajas y bigotes para los datos crudos, sus rangos y sus efectos relativos:
Se observa como el primer gráfico boXplot presenta conjuntos de cajas muy separados, lo cual indica una alta variabilidad entre los distintos niveles de los factores. Mientras que, los gráficos boxplots de los rangos y de los efectos relativos presentan un comportamiento similar.