Actividad 3

Análisis de Regresión

Nathaly Henao - Felipe Roldan

i.

En primera instancia, se extrajeron de la base de datos “Datos Taller “las variables a utilizar en el análisis.

DatosTaller <- read.delim("E:/Univalle/Sexto semestre/Prog en R/DatosTaller.txt")
Data<-DatosTaller
Tiempo<-Data$Tiempo
Carga<-Data$Carga
Tipo_de_disco<-Data$Conf
Tipo_de_disco<-as.factor(Tipo_de_disco)
Tipo_de_disco
##  [1] 1 0 1 0 1 1 0 0 0 1 0 1 1 1 1 0 0 0 1 0 1 0 1 1 0
## Levels: 0 1
## Tipo_de_disco "SDD = 0 y HDD = 1".

Se activan los paquetes pertinentes para realizar las regresiones y las gráficas.

library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(ggplot2)

Para diferenciar el tipo de disco, se crearon las variables tiempo y carga de forma tal que se especificara de qué tipo de disco se trata, esto con el fin de plotear y analizar. Este análisis previo a un análisis conjunto permite ver de forma aislada el comportamiento de las variables controladas por el tipo de disco.

Carga.SDD<-Carga[Tipo_de_disco == 0]
Carga.HDD<-Carga[Tipo_de_disco == 1]
Tiempo.SDD<-Tiempo[Tipo_de_disco == 0]
Tiempo.HDD<-Tiempo[Tipo_de_disco == 1]
Datos.1<-data.frame(Carga.SDD,Tiempo.SDD)
Datos.2<-data.frame(Carga.HDD,Tiempo.HDD)

Ploteamos

M<-lm(Tiempo[Tipo_de_disco == 0]~ Carga[Tipo_de_disco == 0],data = Data)

plot(x=Carga.SDD, y=Tiempo.SDD, xlab = "Consultas por minuto SDD", ylab = "Tiempo SDD",col= c("black"),pch=10, main = "Diagrama de disperción SDD")
abline(M,col="blue")

ggplot(data = Datos.1, aes(x=Carga.SDD,y=Tiempo.SDD))+ geom_point()+
  ggtitle("Diagrama de dispersión SDD")+
  xlab("Consultas por minuto disco SDD")+
  ylab("Tiempo de respuesta disco SDD")+
  geom_smooth(method = lm)
## `geom_smooth()` using formula 'y ~ x'

#Como se aprecia en la grafica anterior, hay una relación positiva entre las consultas por minuto y el tiempo de respuestas del disco (en segundos); todo esto para el disco tipo SDD.

Ploteamos

N<-lm(Tiempo[Tipo_de_disco == 1]~Carga[Tipo_de_disco == 1],data = Data)

plot(x=Carga.HDD, y=Tiempo.HDD, xlab = "Consultas por minuto HDD", ylab = "Tiempo HDD",col= c("Black"),pch=10, main = "Diagrama de disperción HDD")
abline(N,col="blue")

ggplot(data = Datos.2, aes(x=Carga.HDD,y=Tiempo.HDD))+ geom_point()+
  ggtitle("Diagrama de dispersión HDD")+
  xlab("Consultas por minuto disco HDD")+
  ylab("Tiempo de respuesta disco HDD")+
  geom_smooth(method = lm)
## `geom_smooth()` using formula 'y ~ x'

#Como se aprecia en la grafica anterior, hay una relación positiva entre las consultas por minuto y el tiempo de respuestas del disco (en segundos); todo esto para el disco tipo HDD.

Aparentemente se puede apreciar que existe una relación lineal positiva entre la carga y el tiempo independientemente del tipo de disco, sin embargo, si se detalla de forma adecuada los puntos del grafico para el disco HDD tiene un comportamiento más parabólico, más concretamente la parte creciente de una parábola cóncava. El disco SDD también pareciera tener un comportamiento más exponencial que de tipo lineal.

Previo a verificar el grado de correlación de las variables de interés, se debe verificar si los datos gozan de normalidad todo con el fin de aplicar la prueba de correlación más pertinente para la clase de distribución que se posee.

library(normtest)
library(nortest)
ad.test(Carga)
## 
##  Anderson-Darling normality test
## 
## data:  Carga
## A = 0.52694, p-value = 0.1617
ad.test(Tiempo)
## 
##  Anderson-Darling normality test
## 
## data:  Tiempo
## A = 0.35944, p-value = 0.4221
##Al no rechazar la HO= Normalidad, se concluye que los datos tienen un comportamiento normal y se puede proceder a realizar la prueba de correlación por el método de pearson.

Procedemos con test de correlación y lo expresamos en términos de una grafica que acota los dos tipos de disco.

cor.test(x= Carga.SDD,y= Tiempo.SDD, alternative = "less", method = "pearson")
## 
##  Pearson's product-moment correlation
## 
## data:  Carga.SDD and Tiempo.SDD
## t = 28.334, df = 10, p-value = 1
## alternative hypothesis: true correlation is less than 0
## 95 percent confidence interval:
##  -1.0000000  0.9979347
## sample estimates:
##       cor 
## 0.9938293
cor.test(x= Carga.HDD,y= Tiempo.HDD,alternative = "less", method = "pearson")
## 
##  Pearson's product-moment correlation
## 
## data:  Carga.HDD and Tiempo.HDD
## t = 12.024, df = 11, p-value = 1
## alternative hypothesis: true correlation is less than 0
## 95 percent confidence interval:
##  -1.0000000  0.9871297
## sample estimates:
##       cor 
## 0.9640003
##Se aplica el método de Pearson, ya que, se evidencia normalidad en los datos.
ggplot(data = Data)+
  geom_point(aes(x=Carga , y=Tiempo, col= Tipo_de_disco))+
  geom_smooth(aes(x= Carga, y=Tiempo,col= Tipo_de_disco))+
  geom_text(data = NULL,x=2.5, y=5, label="Correlación.SSD = 0.99",col="red")+
  geom_text(data = NULL, x=2.5, y=5.5, label="Correlación.HDD = 0.96",col="blue")
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

Se aprecia que, para los dos tipos de disco, existe una fuerte correlación entre la carga y el tiempo; casi perfectas muy cercanas a 1.Además, al graficar las variables carga vs tiempo diferenciando con color diferente cada tipo de disco, se aprecia un comportamiento de interacción.

ii.

Se ajusta un modelo de regresión simple entre las variables cargo y tiempo sin discriminar el tipo de disco.

\[ Tiempo= b_0 + b_1*Carga+U_1 \]

Modelo1<-lm(Tiempo~Carga, data = Data)
u<-residuals(Modelo1)

El modelo presenta un R-Cuadrado ajustado de 0.8517;un número bastante alto.Seria prudente agregar muchas más variables explicativas para ver si se sigue manteniendo este nivel de ajuste tan elevado. El modelo es significativo en su conjunto.

summary(Modelo1)
## 
## Call:
## lm(formula = Tiempo ~ Carga, data = Data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.16824 -0.40281 -0.03945  0.43541  1.07627 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.04838    0.26321   0.184    0.856    
## Carga        0.49214    0.04177  11.783 3.18e-11 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.5837 on 23 degrees of freedom
## Multiple R-squared:  0.8579, Adjusted R-squared:  0.8517 
## F-statistic: 138.8 on 1 and 23 DF,  p-value: 3.177e-11
##Ante un aumento de una unidad en el numero de consultas por minuto “variable carga”, el tiempo de respuesta del disco aumento en 0.5 segundos aproximadamente con una significancia del 100%; dejando todo lo demás constante.

Previo a la validación de los supuestos que giran entorno a los residuales del modelo y otras pruebas robustas, se activan los paquetes para dicho cometido.

library(moments)
library(normtest)
library(car)
## Loading required package: carData

Se procede a revisar la bondad del ajuste del modelo 1.

##Media 0
mean(u)
## [1] -7.767224e-18
##Exogeneidad
cor(u,Carga)
## [1] -1.104151e-16
Tipo_de_disco<-as.numeric(Tipo_de_disco)

cor(u,Tipo_de_disco)
## [1] 0.2133916
##Normalidad en los errores
kurtosis(u)
## [1] 2.284529
skewness(u) 
## [1] -0.06537449
ad.test(u)
## 
##  Anderson-Darling normality test
## 
## data:  u
## A = 0.14213, p-value = 0.9668
pearson.test(u)
## 
##  Pearson chi-square normality test
## 
## data:  u
## P = 1.56, p-value = 0.906
shapiro.test(u)
## 
##  Shapiro-Wilk normality test
## 
## data:  u
## W = 0.98568, p-value = 0.9702
hist(u)

##Homocedasticidad
bptest(Modelo1)
## 
##  studentized Breusch-Pagan test
## 
## data:  Modelo1
## BP = 0.43435, df = 1, p-value = 0.5099
ncvTest(Modelo1)
## Non-constant Variance Score Test 
## Variance formula: ~ fitted.values 
## Chisquare = 0.2789668, Df = 1, p = 0.59738
##El modelo cumple con la normalidad en sus errores, con el supuesto de independencia o de exogeneidad estricta y las pruebas de homocedasticidad también se cumplen. Quizás al revisar la curtosis y la asimetría, se desvían un poco de lo que pareciera ser una normal, sin embargo, los 3 test de normalidad realizados podemos afirmar con toda seguridad de que el modelo goza de un excelente ajuste.

iii.

Se ajusta ahora un nuevo modelo el cual, incluye la variable tipo_de_disco y la interacción entre dicha variable y la variable carga.

Tipo_de_disco<-Data$Conf
Tipo_de_disco<-as.factor(Tipo_de_disco)
Modelo2<-lm(Tiempo~Carga + Tipo_de_disco + Carga*Tipo_de_disco,data = Data)
u2<-residuals(Modelo2)

El modelo presenta un R-Cuadrado ajustado de 0.9648; un número bastante alto. Comparándolo con el modelo 1, al tener más variables explicativas y al modelar la interacción el modelo 2 aparentemente tiene un mejor ajuste; Ya veremos más adelante si es así. El modelo es significativo en su conjunto.

summary(Modelo2)
## 
## Call:
## lm(formula = Tiempo ~ Carga + Tipo_de_disco + Carga * Tipo_de_disco, 
##     data = Data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.68547 -0.11333  0.06881  0.15302  0.41807 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          -1.37549    0.20902  -6.581 1.62e-06 ***
## Carga                 0.71979    0.03367  21.376 9.88e-16 ***
## Tipo_de_disco1        2.26391    0.26520   8.536 2.86e-08 ***
## Carga:Tipo_de_disco1 -0.35734    0.04227  -8.454 3.36e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2844 on 21 degrees of freedom
## Multiple R-squared:  0.9692, Adjusted R-squared:  0.9648 
## F-statistic: 220.2 on 3 and 21 DF,  p-value: 5.042e-16
##Ante un aumento de una unidad en el número de consultas por minuto “variable carga”, el tiempo de respuesta del disco aumento en 0.72 segundos aproximadamente con una significancia del 100%; dejando todo lo demás constante.

##El tiempo de respuesta del disco aumenta en 2.26 segundos aproximadamente cuando se trata de un disco tipo HDD; en contraste con un tipo SDD. Esto con significancia del 100% y dejando todo lo demás constante.

##Ante un aumento de una unidad en el número de consultas por minuto “variable carga”, el tiempo de respuesta del disco disminuye en 0.36 segundos aproximadamente con una significancia del 100%; dejando todo lo demás constante. Todo esto cuando el disco es HDD, en contraste con un tipo SDD.

Ajuste del modelo

##Criterio de información de Akaike
AIC(Modelo1,Modelo2)
##         df      AIC
## Modelo1  3 47.94816
## Modelo2  5 13.72568
##Homocedasticidad
bptest(Modelo2)
## 
##  studentized Breusch-Pagan test
## 
## data:  Modelo2
## BP = 2.6825, df = 3, p-value = 0.4432
ncvTest(Modelo2)
## Non-constant Variance Score Test 
## Variance formula: ~ fitted.values 
## Chisquare = 0.8566399, Df = 1, p = 0.35468
##El criterio de información de AKAIKE confirma de forma robusta que, el modelo 2 tiene un mejor ajuste que le modelo dos. Adicional, se comprobó que el modelo goza de varianza constante en sus errores, es decir, homocedasticidad.

iv.

La ecuación y la gráfica

\[ Tiempo= b_0 + b_1*Carga+b_2TipoDeDisco+b_3Carga*TipoDeDisco+U_2 \]

ggplot(data = Data)+
  geom_line(aes(x=Carga , y=Tiempo, col= Tipo_de_disco))+
  geom_smooth(aes(x= Carga, y=Tiempo,col= Tipo_de_disco))+
  geom_text(data = NULL,x=3, y=1, label="Disco SDD",col="red")+
  geom_text(data = NULL, x=3.5, y=2.5, label="Disco HDD",col="blue")
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

v. Anova

anova(Modelo1,Modelo2)
## Analysis of Variance Table
## 
## Model 1: Tiempo ~ Carga
## Model 2: Tiempo ~ Carga + Tipo_de_disco + Carga * Tipo_de_disco
##   Res.Df    RSS Df Sum of Sq      F    Pr(>F)    
## 1     23 7.8375                                  
## 2     21 1.6990  2    6.1386 37.938 1.067e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
ggplot(data = Data)+
  geom_point(aes(x=Carga,y=Tiempo))+
  geom_line(aes(x=Carga,y=predict(Modelo1)),col="green")+
  geom_line(aes(x=Carga,y=predict(Modelo2)),col="purple")

##El test de ANOVA demuestra que el modelo 2 tiene un mejor ajuste.

vi

Pruebas

##

##Media 0
mean(u2)
## [1] -3.192108e-17
##Exogeneidad
cor(u2,Carga)
## [1] 2.077154e-16
Tipo_de_disco<-as.numeric(Tipo_de_disco)
cor(u2,Tipo_de_disco)
## [1] 4.857831e-17
##Normalidad en los errores
kurtosis(u2)
## [1] 3.150829
skewness(u2) 
## [1] -0.7106014
ad.test(u2)
## 
##  Anderson-Darling normality test
## 
## data:  u2
## A = 0.41309, p-value = 0.3132
pearson.test(u2)
## 
##  Pearson chi-square normality test
## 
## data:  u2
## P = 2.84, p-value = 0.7246
shapiro.test(u2)
## 
##  Shapiro-Wilk normality test
## 
## data:  u2
## W = 0.95551, p-value = 0.3323
hist(u2)

##El modelo cumple con la normalidad en sus errores, con el supuesto de independencia o de exogeneidad estricta y las pruebas de curtosis y asimetría también se cumplen. Se puede afirmar con total confianza que se tiene un buen

vii

Concluir

En retrospectiva con todo el análisis realizado previamente se puede decir que, el modelo 2 es la herramienta más útil para empezar a conjeturar y decir algo sobre el comportamiento de los discos entorno a la carga y el tiempo de respuesta. El Disco HDD presenta un mayor tiempo de respuesta a medida que aumentan las consultas por minuto, es decir, la variable carga; todo esto en comparación a un disco SDD. Sin embargo, al ejecutar la interacción y al ver las diferentes graficas se puede concluir algo muy interesante. El disco HDD a partir de cierto nivel de consultas por minuto, empieza a reducir el tiempo de respuesta, cosa que no pasa con el disco tipo SDD. Esto permite concluir que, el disco HDD empieza a mostrar un mayor potencial en términos de reducir el tiempo de respuesta, a medida que el numero de consultas por minuto ronda niveles de 7.5.

Tipo_de_disco<-Data$Conf
Tipo_de_disco<-as.factor(Tipo_de_disco)

ggplot(data = Data)+
  geom_point(aes(x=Carga , y=Tiempo, col= Tipo_de_disco))+
  geom_smooth(aes(x= Carga, y=Tiempo,col= Tipo_de_disco))+
  geom_text(data = NULL,x=2.5, y=5, label="Correlación.SSD = 0.99",col="red")+
  geom_text(data = NULL, x=2.5, y=5.5, label="Correlación.HDD = 0.96",col="blue")
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

En esta grafica se puede apreciar, que después de que el numero de consultas por minuto el disco HDD empieza a estabilizar su tiempo de respuesta en segundos, en 4 segundos aproximadamente. Por tanto, el disco HDD sería la mejor opción; todo esto según los datos de la muestra de 25 observaciones.