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
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"))
• 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
• 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
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'
• 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)
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.
• 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'
• 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.
# 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
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
• 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.