Usuario:JulioSergio/Taller
Informática: Código en el lenguaje de programación R
editarEn lo que sigue, se retoma el mismo problema abordado por los dos códigos de programación anteriores, pero ahora en el lenguaje de programación R, y se añaden algunos puntos de muestreo al final del mismo. El total de puntos sería como se muestra en la tabla siguiente:
Tiempo (días) | % de avance |
---|---|
1 | 5 |
2 | 5 |
3 | 5 |
4 | 6.8 |
5 | 9 |
10 | 10 |
20 | 16 |
29 | 30 |
38 | 33 |
50 | 43 |
#
# Lenguaje de Programacion: R
# Ejemplo de "Linear Regression"
# Licencia: GNU/GPL
# -----------------------------
# datos:
x <- 1:5 # dias
y <- c(5, 5, 5, 6.8, 9) # % de avance
futuro <- 100 # conclusion: 100%
# solucion:
reg <- function(x, y) {
n <- length(x) # cantidad de datos
Sx <- sum(x)
Sy <- sum(y)
Sxx <- sum(x^2)
Sxy <- sum(x*y)
# la pendiente, ecuacion (11):
b <- (Sx*Sy - n*Sxy)/(Sx^2-n*Sxx)
# la intersección con ordenadas, ecuacion (12):
a <- (Sy - b*Sx)/n
return(list(a=a,b=b))
}
# ejecucion de la solucion
# con los primeros 5 datos
sol <- reg(x,y) # sol$a, sol$b; intersecto y pendiente respectivamente
# Ecuaciones
fy <- function(x) {sol$a + sol$b*x} # y a partir de x
fx <- function(y) {(y - sol$a)/sol$b} # x a partir de y
# Con los primeros 5 datos se predice:
print(paste("(con 5 datos) Se espera concluir a los", round(fx(futuro)), "dias"))
# --------------------------
# Se agregan otros 5 datos:
x <- c(x, 10, 20, 29, 38, 50)
y <- c(y, 10, 16, 30, 33, 43)
# 2a. ejecucion de la solucion,
# con 10 datos
sol <- reg(x,y)
# Con todos los 10 datos se predice:
print(paste("(con 10 datos) Se espera concluir a los", round(fx(futuro)), "dias"))
# Gráfica
plot(x,y, col="red",
xlab = "días", ylab = "% avance",
xlim = c(0, fx(futuro)), ylim = c(0,100))
abline(sol$a, sol$b, col="blue")
# -----------------------------
# RESULTADO DEL CÓDIGO ANTERIOR:
## [1] "(con 5 datos) Se espera concluir a los 99 dias"
## [1] "(con 10 datos) Se espera concluir a los 122 dias"
El código anterior además produce la gráfica que se muestra en el recuadro.
--JulioSergio (discusión) 23:12 12 nov 2019 (UTC)