# Número de usuarios = Variable explicativa o independiente
usuarios <- c(10, 15, 20, 20, 25, 30, 30); usuarios[1] 10 15 20 20 25 30 30
tiempo = c(1.0, 1.2, 2.0, 2.1, 2.2, 2.0, 1.9); tiempo [1] 1.0 1.2 2.0 2.1 2.2 2.0 1.9
Ejemplo 1: El tiempo que tarda un sistema informático en red en ejecutar una instrucción depende del número de usuarios conectados a él. Sí no hay usuarios el tiempo es cero. Se tienen registrados los siguientes datos:
Creamos los dos vectores de usuarios y tiempo.
# Número de usuarios = Variable explicativa o independiente
usuarios <- c(10, 15, 20, 20, 25, 30, 30); usuarios[1] 10 15 20 20 25 30 30
tiempo = c(1.0, 1.2, 2.0, 2.1, 2.2, 2.0, 1.9); tiempo [1] 1.0 1.2 2.0 2.1 2.2 2.0 1.9
Creamos un marco de datos con los dos vectores
Sistema <- data.frame(Usuarios=usuarios, Tiempo=tiempo);Sistema Usuarios Tiempo
1 10 1.0
2 15 1.2
3 20 2.0
4 20 2.1
5 25 2.2
6 30 2.0
7 30 1.9
summary(Sistema) Usuarios Tiempo
Min. :10.00 Min. :1.000
1st Qu.:17.50 1st Qu.:1.550
Median :20.00 Median :2.000
Mean :21.43 Mean :1.771
3rd Qu.:27.50 3rd Qu.:2.050
Max. :30.00 Max. :2.200
cov(Sistema) # Matriz de covarianzas Usuarios Tiempo
Usuarios 55.952381 2.714286
Tiempo 2.714286 0.222381
cor(Sistema, use = "all.obs", method="pearson") # Matriz de correlaciones Usuarios Tiempo
Usuarios 1.0000000 0.7694803
Tiempo 0.7694803 1.0000000
#Elabora un gráfico de dispersión para analizar alguna relación entre las variables.
plot(Sistema, xlim= c(5, 35), ylim= c(0.0, 2.5), type = "p", pch=1, col = "blue", main =
"Gráfico de dispersión (Usuarios, Tiempo)", xlab="Número de usuarios", ylab="Tiempo de ejecución") reg.Y.X <- lm(Tiempo ~ -1 + Usuarios, Sistema, na.action=NULL, method="qr", model=TRUE)
#-1 indica que no se toma en cuenta la constante en el modelo.
summary(reg.Y.X)
Call:
lm(formula = Tiempo ~ -1 + Usuarios, data = Sistema, na.action = NULL,
method = "qr", model = TRUE)
Residuals:
Min 1Q Median 3Q Max
-0.4831 -0.1873 0.2056 0.3127 0.5113
Coefficients:
Estimate Std. Error t value Pr(>|t|)
Usuarios 0.079437 0.006496 12.23 1.82e-05 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.3871 on 6 degrees of freedom
Multiple R-squared: 0.9614, Adjusted R-squared: 0.955
F-statistic: 149.5 on 1 and 6 DF, p-value: 1.821e-05
reg.anova <- anova(reg.Y.X); reg.anova Analysis of Variance Table
Response: Tiempo
Df Sum Sq Mean Sq F value Pr(>F)
Usuarios 1 22.4011 22.4011 149.53 1.821e-05 ***
Residuals 6 0.8989 0.1498
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Por lo tanto se concluye con una certeza del 95% que si depende la cantidad de usuarios y el tiempo en realizar la instruccion el sistema.
Ejemplo 2: A continuacion se presentan otras dos variables y verificaremos el grado de relacion entre ellas, y si dependen una de la otra.
# Ejemplo de datos
x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9)
y <- c(2, 4, 5, 4, 5, 7, 8, 9, 10)
cor(x,y, use = "all.obs", method="pearson")[1] 0.9660918
# Ajuste de modelo de regresión lineal
modelo <- lm(y ~ x)
# Mostrar el resumen del modelo
summary(modelo)
Call:
lm(formula = y ~ x)
Residuals:
Min 1Q Median 3Q Max
-1.0667 -0.2667 0.1333 0.2667 0.8667
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.33333 0.53055 2.513 0.0402 *
x 0.93333 0.09428 9.899 2.29e-05 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.7303 on 7 degrees of freedom
Multiple R-squared: 0.9333, Adjusted R-squared: 0.9238
F-statistic: 98 on 1 and 7 DF, p-value: 2.287e-05
# Crear el gráfico de dispersión
plot(x, y, main="Recta de Mejor Ajuste", xlab="Variable X", ylab="Variable Y")
# Agregar la recta de mejor ajuste al gráfico
abline(modelo, col="red")anova(modelo)Analysis of Variance Table
Response: y
Df Sum Sq Mean Sq F value Pr(>F)
x 1 52.267 52.267 98 2.287e-05 ***
Residuals 7 3.733 0.533
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Podemos verificar que si dependen las variables una de la otra.