Laboratorio No.2 - Análsis de Regresión

Drescripcion del problema

Con la intención de comparar el desempeño de dos clases de discos duros (0: SDD, 1: HDD). Este desempeño es medido a través de la variable Y: tiempo de respuesta del disco (segundos), la cual se relaciona, posiblemente bajo.

Una dependencia no lineal, de X: la carga del sistema (Número de consultas por minuto). Se han realizado múltiples ensayos bajo ambas configuraciones y bajo variación de la carga del sistema. Los resultados se presentan en la siguiente tabla:

Tablas

1. Represente gráficamente la relación entre el tiempo de respuesta y la carga de trabajo diferenciando los dos tipos de disco duro. ¿Se evidencia una relación lineal? Mida la fuerza de esta relación para ambos tipos de disco realizando los test correspondientes test de correlación en cada caso.

Iniciamos estableciendo la instalando de las librerias junto a la tabla con nuestros datos.

#Librerias
library(ggplot2)
library(car)
## Loading required package: carData

Creamos la base de datos con el nombre de disco, con la funcion names vemos los nombres de nuestras variables y con la funcion str vemos todos los detalles internos del objeto

library(readr)
library(here)
## here() starts at E:/GESTION DE DATOS/TALLER _2
disco <- read.table(here("datos","DatosTaller.txt"),header = TRUE, dec=".")
names(disco)
## [1] "Conf"   "Carga"  "Tiempo"
str(disco)
## 'data.frame':    25 obs. of  3 variables:
##  $ Conf  : int  1 0 1 0 1 1 0 0 0 1 ...
##  $ Carga : num  1 2 2.4 3.1 4 4.3 5.8 6.6 7.5 8 ...
##  $ Tiempo: num  0.9 0.3 2 0.8 2.7 2.6 2.5 3.2 3.7 3.9 ...

Como ya tenemos un vistazo de nuestra base de datos, con sus variables, sus columnas y filas

• Vamos a cambiar la variable Conf a tipo factor, para poder cabiar las etiqueta y crear nuevas graficas • De nuestra base de datos extraemos cada columna y se le asigna el nombre de la variable que representa cada columna.

#Ajustar la variable Conf como factor
disco$Conf <- as.factor(disco$Conf)
str(disco$Conf)
##  Factor w/ 2 levels "0","1": 2 1 2 1 2 2 1 1 1 2 ...
Tiempo<-disco$Tiempo
Carga<-disco$Carga
Tipo_disco<-disco$Conf

Separamos los datos que corresponden a discos SDD y HDD

carga.sdd<-Carga[Tipo_disco == 0]
carga.hdd<-Carga[Tipo_disco == 1]
tiempo.sdd<-Tiempo[Tipo_disco == 0]
tiempo.hdd<-Tiempo[Tipo_disco == 1]
datos.sdd<-data.frame(carga.sdd,tiempo.sdd)
datos.hdd<-data.frame(carga.hdd,tiempo.hdd)
#Comprobacion de normalidad sobre las variables
shapiro.test(carga.sdd)
## 
##  Shapiro-Wilk normality test
## 
## data:  carga.sdd
## W = 0.94901, p-value = 0.6225
shapiro.test(tiempo.sdd)
## 
##  Shapiro-Wilk normality test
## 
## data:  tiempo.sdd
## W = 0.94783, p-value = 0.6055
shapiro.test(carga.hdd)
## 
##  Shapiro-Wilk normality test
## 
## data:  carga.hdd
## W = 0.92028, p-value = 0.2531
shapiro.test(tiempo.hdd)
## 
##  Shapiro-Wilk normality test
## 
## data:  tiempo.hdd
## W = 0.89801, p-value = 0.1256

Con la comprobacion de normalidad nos podemos dar cuenta que el p es mayor a 0.05 y por esto utilizamosel modelo de pearson

library(ggplot2)

x11()
ggplot(disco, mapping= aes(x = Carga, y = Tiempo, color=factor(Conf))) +
  geom_point()+
  labs(x="Carga del sistema", y="Tiempo de respuesta")+
  scale_color_manual(values = c("blue","red"),labels=c("SDD","HDD"))

Relacion tiempo y carga disco SDD

• Con el plot vemos los datos de forma estandar y que tineen una distribucion normal

sdd_data <- disco[disco$Conf == "0", ]

# Crear el gráfico de dispersión
plot(sdd_data$Carga, sdd_data$Tiempo, 
     xlab = "Carga de trabajo", ylab = "Tiempo de respuesta",
     main = "Relación tiempo y carga disco (SDD)",
     pch = 16, col = "blue")

# Ajustar el gráfico para mejorar la visualización
abline(lm(sdd_data$Tiempo ~ sdd_data$Carga), col = "red")

# Agregar leyenda
legend("topleft", legend = "Ajuste lineal", col = "red", lwd = 1, bty = "n")

De acuerdo con el ajuste lineal se representa una relacion positiva, entre consultas por minutos del disco SDD con el tiempo de respuesta del mismo

x11()
ggplot(datos.sdd, aes(x=carga.sdd,y=tiempo.sdd)) +
  geom_point()+
  xlab("Consultas por minuto disco SDD")+
  ylab("Tiempo de respuesta disco SDD")+
  theme_bw()

Con la funcion cor.test analizamos el coeficiente de relacion con diferentes metodos, Como los datos tiene una distribucion normal utilizamos la distribucion de pearson

cor.test(x= datos.sdd$carga.sdd, y= datos.sdd$tiempo.sdd, alternative = "greater", method = "pearson" )
## 
##  Pearson's product-moment correlation
## 
## data:  datos.sdd$carga.sdd and datos.sdd$tiempo.sdd
## t = 28.334, df = 10, p-value = 3.487e-11
## alternative hypothesis: true correlation is greater than 0
## 95 percent confidence interval:
##  0.9816387 1.0000000
## sample estimates:
##       cor 
## 0.9938293

Relacion tiempo y carga disco HDD

• Con el plot vemos los datos de forma estandar y que tineen una distribucion normal

hdd_data <- disco[disco$Conf == "1", ]

# Crear el gráfico de dispersión
plot(hdd_data$Carga, hdd_data$Tiempo, 
     xlab = "Carga de trabajo", ylab = "Tiempo de respuesta",
     main = "Relación tiempo y carga disco (HDD)",
     pch = 16, col = "blue")

# Ajustar el gráfico para mejorar la visualización
abline(lm(hdd_data$Tiempo ~ hdd_data$Carga), col = "red")

# Agregar leyenda
legend("topleft", legend = "Ajuste lineal", col = "red", lwd = 1, bty = "n")

De acuerdo con el ajuste lineal se representa una relacion positiva, entre consultas por minutos del disco HDD con el tiempo de respuesta del mismo

x11()
ggplot(datos.hdd, aes(x=carga.hdd,y=tiempo.hdd)) +
  geom_point()+
  xlab("Consultas por minuto disco HDD")+
  ylab("Tiempo de respuesta disco HDD")+
  theme_bw()

Con la funcion cor.test analizamos el coeficiente de relacion con diferentes metodos, Como los datos tiene una distribucion normal utilizamos la distribucion de pearson

cor.test(x= datos.hdd$carga.hdd, y= datos.hdd$tiempo.hdd, alternative = "greater", method = "pearson" )
## 
##  Pearson's product-moment correlation
## 
## data:  datos.hdd$carga.hdd and datos.hdd$tiempo.hdd
## t = 12.024, df = 11, p-value = 5.698e-08
## alternative hypothesis: true correlation is greater than 0
## 95 percent confidence interval:
##  0.9013679 1.0000000
## sample estimates:
##       cor 
## 0.9640003

Relaciones de distribucion de disco HDD y SDD juntos

Se puede observar que, para ambos tipos de discos, existe una fuerte correlación entre carga y tiempo, tambien se puede apreciar un comportamiento interactivo segun el tipo de disco.

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

2. Ajuste un primer modelo de regresión simple (Modelo 1) que reproduzca la relación entre la carga y el tiempo de respuesta, sin incluir la configuración del disco duro.

• El modelo tiene un R-squared ajustado de 0.8517, que es un numero alto. Vamos a añadir mas variables para ver si se mantiene alto el grado de concordancia. Y podremos concliur que todo este patron tiene un sentido.

modelo1<-lm(Tiempo~ Carga,data = disco)
summary(modelo1)
## 
## Call:
## lm(formula = Tiempo ~ Carga, data = disco)
## 
## 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

Mirar el juste del modelo sobre los puntos

# Mirar el juste del modelo sobre los puntos

x11()
ggplot(disco, aes(x= Carga, y= Tiempo)) + 
  geom_point() + 
  theme_bw()+
  geom_line(aes( x = Carga, 
                 y = predict(modelo1, disco)), 
            color = "#1C86EE")

Inspeccion de los residuos

# Inspección de los residuos
x11()
par(mfrow=c(2,2))
plot(modelo1)

3. Obtenga un nuevo modelo (Modelo 2) en el que incluya el tipo de disco y su interacción con la carga del equipo. A

Se ajusta un nuevo modelo, que incluye la variable tipo_disco y la interacción entre dicha variable y la variable de carga

modelo2 <- lm(disco$Tiempo ~ disco$Carga  + Tipo_disco + disco$Carga*Tipo_disco)
summary(modelo2)
## 
## Call:
## lm(formula = disco$Tiempo ~ disco$Carga + Tipo_disco + disco$Carga * 
##     Tipo_disco)
## 
## 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 ***
## disco$Carga              0.71979    0.03367  21.376 9.88e-16 ***
## Tipo_disco1              2.26391    0.26520   8.536 2.86e-08 ***
## disco$Carga:Tipo_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

Inspección de los residuos

# Inspección de los residuos
x11()
par(mfrow=c(2,2))
plot(modelo2)

El modelos tiene un R-squared ajustado de 0.9692; es un número grande. Si es comparado con el modelo 1, con el Modelo 2, el Modelo 2 tiene un mejor ajuste.

4. Escriba la ecuación del modelo 2 y represéntela gráficamente

• La ecuacion

Tiempo= (b0+b1 ∗ Carga) + b2Tipo_disco + (b3Carga ∗ Tipo_disco)

X11()
ggplot(data = disco)+
  geom_line(aes(x=Carga , y=Tiempo, col= Tipo_disco))+
  geom_smooth(aes(x= Carga, y=Tiempo,col= Tipo_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'

5. Mediante el test anova, pruebe que la inclusión de la variable cualitativa configuración del disco, mejora significativamente el ajuste del modelo.

• Utilizamos el test de Anova, para comprobar las varianzas enre los promedio de los “tipos_disco”

• Con el test vemos que el modelo dos tiene un mejor ajuste

• Con los datos que se nos proporcionan, decidimos ri rechazamos la H0 o la aceptamos

anova(modelo1,modelo2)
## Warning in anova.lmlist(object, ...): models with response '"disco$Tiempo"'
## removed because response differs from model 1
## Analysis of Variance Table
## 
## Response: Tiempo
##           Df Sum Sq Mean Sq F value    Pr(>F)    
## Carga      1 47.313  47.313  138.84 3.177e-11 ***
## Residuals 23  7.838   0.341                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
library(car)
compareCoefs(modelo1,modelo2)
## Calls:
## 1: lm(formula = Tiempo ~ Carga, data = disco)
## 2: lm(formula = disco$Tiempo ~ disco$Carga + Tipo_disco + disco$Carga * 
##   Tipo_disco)
## 
##                         Model 1 Model 2
## (Intercept)              0.0484 -1.3755
## SE                       0.2632  0.2090
##                                        
## Carga                    0.4921        
## SE                       0.0418        
##                                        
## disco$Carga                      0.7198
## SE                               0.0337
##                                        
## Tipo_disco1                       2.264
## SE                                0.265
##                                        
## disco$Carga:Tipo_disco1         -0.3573
## SE                               0.0423
## 
x11()
ggplot(data = disco)+
  geom_point(aes(x=Carga,y=Tiempo))+
  geom_line(aes(x=Carga,y=predict(modelo1)),col= "#CD1076")+
  geom_line(aes(x=Carga,y=predict(modelo2)),col= "blue")

La Hipotesis: H0: El modelo NO tiene contribuye a explicar el tiempo de respuesta de los discos, H1: El modelos SI contribuye a explicar el tiempo de respuesta de los discos

El test de Anova nos muestra que la variable Conf mejora significativamente al ajuste del modelos, porque segun nuestro datos, alfa es mayor o igual al “Valor-p” encontrado, por esto se rechaza el H0, y aceptamos el H1.

6. Evaluación del los supuestos en los modelos (1 y 2)

# Modelo 1
modelo1<-lm(Tiempo~ Carga,data = disco)
summary(modelo1)
## 
## Call:
## lm(formula = Tiempo ~ Carga, data = disco)
## 
## 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
# Modelo 2
modelo2 <- lm(disco$Tiempo ~ disco$Carga  + Tipo_disco + disco$Carga*Tipo_disco)
summary(modelo2)
## 
## Call:
## lm(formula = disco$Tiempo ~ disco$Carga + Tipo_disco + disco$Carga * 
##     Tipo_disco)
## 
## 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 ***
## disco$Carga              0.71979    0.03367  21.376 9.88e-16 ***
## Tipo_disco1              2.26391    0.26520   8.536 2.86e-08 ***
## disco$Carga:Tipo_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

Los Supuestos

1. Lineal Hay una relacion lineal entre las avriables independiente y dependiente

#Modelo 1
plot(modelo1, 1)

#Modelo 2
plot(modelo2, 1)

2. Normalidad en los residuos (errores)

Los residuos (errores) no siguen una distribución normal

#Modelo 1
plot(modelo1, 2)

#Modelo 2
plot(modelo2, 2)

#Se realiza una prueba de Shapiro
shapiro.test(modelo1$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  modelo1$residuals
## W = 0.98568, p-value = 0.9702
shapiro.test(modelo2$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  modelo2$residuals
## W = 0.95551, p-value = 0.3323

7. Concluir

• Se concluye que existe una relación significativa entre el tiempo de respuesta y la carga de trabajo, y que esta relación se ve afectada por el tipo de disco duro utilizado. El Modelo 2, que incluye la configuración del disco duro y su interacción con la carga de trabajo, muestra un mejor ajuste y explica una mayor proporción de la variabilidad en el tiempo de respuesta en comparación con el Modelo 1. Sin embargo, es importante tener en cuenta que los residuos no siguen una distribución normal, lo que indica que los modelos pueden no cumplir plenamente con los supuestos de regresión lineal.