Ajuste de Curva
Los modelos de regresión lineal simple y múltiple muchas veces no son la mejor alternativa. Para otros casos, se disponen de otras variables que se ajustan más a las curvas que a las funciones lineales. En ese sentido, se desarrollará las diferentes formas de regresión por ajuste de curvas, tales como la exponencial, la potencial, la logarítmica y la polinómica.
Regresión Exponencial
El modelo de regresión exponencial obedece la escuación: \[ Y=ae^{bX} \] Aplicando la función logaritmo natural o neperiano: \[ lnY=ln(ae^{bX}) \] Linealizando , se obtendrá: \[ lnY=lna+bX \] De esta manera, se convertirá en una función lineal.
En R:
Ingresamos ciertos datos:
x<-seq(1,96,by=5)
y<-c(3.8,2.9,2.2,1.8,1.4,1.1,0.8,0.6,0.5,0.5,0.3,0.21,0.2,0.15,0.1,0.08,0.06,0.05,0.04,0.04)
Data=data.frame(x,y)
Con la función \(lm\) se realiza el modelo de regresión lineal con la variable independiente \(X\) y la variable dependiente \(log(Y)\)
##
## Call:
## lm(formula = log(y) ~ x, data = Data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.12133 -0.05700 -0.01107 0.02214 0.24434
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.3708977 0.0439324 31.20 <2e-16 ***
## x -0.0501823 0.0007786 -64.45 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1004 on 18 degrees of freedom
## Multiple R-squared: 0.9957, Adjusted R-squared: 0.9954
## F-statistic: 4154 on 1 and 18 DF, p-value: < 2.2e-16
En dicha regresión, se observa que las variables (Intercepto y x) son significativas. Se rechaza la hipótesis nula, es decir, 𝛽𝑗 ≠ 0. Además, el modelo de regresión exponencial se aproxima en un 99.57% a los datos.
La gráfica de Y VS x:
Mientras que la gráfica de \(lnY=lna+bX\) es:
plot(x,log(y), pch=22, bg="red", main = "log(y) vs X")
abline(reg=reg.exp, col="blue", lwd=1.5)
grid(5,5,lwd=2)
De los resultados de la regresión se deduce que \(lna=1.37\) y \(b=0.05\), entonces: \[ a=e^{lna}=e^{1.37}= 3.93 \] Por lo tanto, la ecuación exponencial aproximada es: \[ Y=3.93e^{-0.05} \] Su gráfica se realiza con la siguiente codificación:
plot(x,y, pch=21, bg="turquoise", main="Aproximación")
lines(x, exp(reg.exp$fitted.values), col="red")
grid(10, 10, lwd=2)
# Regresión Potencial
El modelo de regresión potencial obedece a la ecuación: \[ Y=aX^b \] Aplicando la función logaritmo natural o neperiano: \[ lnY=ln(aX^b) \] Linealizando, se obtendrá: \[ lnY=lna+blnX \] De esta manera, se convertirá en una función lineal.
En R:
## x y
## 1 1 7
## 2 2 30
## 3 3 90
## 4 4 170
## 5 5 290
## 6 6 450
## 7 7 650
Realizamos el modelo de regresión lineal con la variable independiente log(X) y la variable dependiente log(Y)
##
## Call:
## lm(formula = log(y) ~ log(x), data = Data)
##
## Residuals:
## 1 2 3 4 5 6 7
## 0.0606501 -0.1135982 0.0317970 -0.0085326 0.0009566 0.0116993 0.0170278
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.88526 0.04924 38.29 2.29e-07 ***
## log(x) 2.35092 0.03586 65.55 1.56e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.06016 on 5 degrees of freedom
## Multiple R-squared: 0.9988, Adjusted R-squared: 0.9986
## F-statistic: 4297 on 1 and 5 DF, p-value: 1.564e-08
Lo primero se que se observa es que las variables son estadísticamente significativas. Además, el modelo de regresión potencial se aproxima a un 99.88% a los datos. Loa grafica sería:
Gráfica de \(lnY=lnla+blnX\)
plot(log(x),log(y), pch=22, bg="red", main="ln(Y) VS ln(X)", xlab="ln(X)", ylab="ln(Y)")
abline(reg=reg.potencial, col="blue", lwd=1.5)
grid(5, 5, lwd=2)
La gráfica de la aproximación es:
plot(x,y, pch=21, bg="turquoise", main="Aproximación")
lines(x, exp(reg.potencial$fitted.values), col="red")
grid(10,10,lwd=2)
La gráfica de los residuos sería´:
plot(predict(reg.potencial), residuals(reg.potencial), pch=22, bg="red", main="Gráfica de Residuos")
grid(10,10, lwd=1.5)
lines(predict(reg.potencial), residuals(reg.potencial), type="h", col="green", lwd=2)
abline(h=0, col="red", lty=3, lwd=1.5)
Regresión Logarítmica
El modelo de regresión logarítmico obedece la ecuación: \[ Y=a+blnX \] En R sería:
## x y
## 1 4 240
## 2 8 200
## 3 12 150
## 4 14 130
## 5 18 100
## 6 23 80
## 7 28 60
## 8 32 30
Con la función lm se realiza el modelo de regresión lineal con la variable independiente log(X) y variable dependiente Y:
##
## Call:
## lm(formula = y ~ log(x), data = Data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -14.659 -4.980 2.592 3.795 15.660
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 395.297 16.435 24.05 3.39e-07 ***
## log(x) -101.449 5.967 -17.00 2.65e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 10.95 on 6 degrees of freedom
## Multiple R-squared: 0.9797, Adjusted R-squared: 0.9763
## F-statistic: 289.1 on 1 and 6 DF, p-value: 2.648e-06
En la figura anterior se observa que las variables son significativas. Además, el modelo de regresión logarítmica se aproxima en un 97.97% a los datos. La gráfica de Y vs X es:
Gráfica Y vs lnX:
plot(log(x), y, pch=22, bg="red", main="Y vs ln(X)", xlab = "ln(x)", ylab = "Y")
abline(reg=reg.logaritmica, col="blue", lwd=1.5)
grid(10,10,lwd=2)
El gráfico de \(Y=\beta_1+\beta_2lnX\):
plot(x,y, pch=21, bg="turquoise", main="Aproximación")
lines(x, reg.logaritmica$fitted.values, col="red")
grid(10,10,lwd=2)
Regresión Polinómica:
El modelo de regresión polinómica de grado n obecede la ecuación: \[ Y=\beta_0+\beta_1X+\beta_2X^2+...+\beta_nX^n \] En R ello se trabaja de la siguiente manera:
x<-seq(-1.5,1.5, length.out = 10)
y<-c(0.56,-0.86,-0.9,-0.4,-0.05,-0.05,-0.43,-0.90,-0.86,0.56)
Data<-data.frame(x,y)
Data
## x y
## 1 -1.5000000 0.56
## 2 -1.1666667 -0.86
## 3 -0.8333333 -0.90
## 4 -0.5000000 -0.40
## 5 -0.1666667 -0.05
## 6 0.1666667 -0.05
## 7 0.5000000 -0.43
## 8 0.8333333 -0.90
## 9 1.1666667 -0.86
## 10 1.5000000 0.56
Elaborar un modelo de regresión polinómica de grado 4; debe incluirse I(), para poder crear una nueva variable con operaciones de potencia:
##
## Call:
## lm(formula = y ~ x + I(x^2) + I(x^3) + I(x^4), data = Data)
##
## Residuals:
## 1 2 3 4 5 6 7
## 0.0022028 -0.0026457 -0.0106352 0.0215210 -0.0076807 -0.0045338 -0.0001224
## 8 9 10
## -0.0003205 0.0042075 -0.0019930
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.010742 0.007146 1.503 0.193
## x -0.009576 0.010063 -0.952 0.385
## I(x^2) -1.994495 0.017495 -114.002 9.85e-10 ***
## I(x^3) 0.004878 0.005705 0.855 0.432
## I(x^4) 0.994917 0.007411 134.255 4.35e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.01174 on 5 degrees of freedom
## Multiple R-squared: 0.9998, Adjusted R-squared: 0.9996
## F-statistic: 5379 on 4 and 5 DF, p-value: 2.879e-09
En el modelo presentado, se puede observar que \(x^2\) y \(x^4\) son variables significativas. Además, se rechaza la hipótesis nula, es decir, \(\beta_j \not = 0\) (tanto para j=2 y j=4). Además, el modelo de regresión polinómica se aproxima en un 99.80% a los datos.
plot(x,y, pch=21, bg="red", main="Aproximación", ylim=c(-1.1,0.7))
beta<-reg.polinomial$coefficients
x2<-seq(-1.5,1.5, length.out = 100)
y2<-beta[1]+beta[2]*x2+beta[3]*x2^2+beta[4]*x2^3+beta[5]*x2^4
lines(x2, y2, col="red", lty=2)
grid(10,10,lwd=2)
Ejemplos
Ejemplo 1: Regresión Cuadrática
Considerar los siguiente datos:
x<-c(1.2,1.8,3.1,4.9,5.7,7.1,8.6,9.8)
y<-c(4.5,5.9,7.0,7.8,7.2,6.8,4.5,2.7)
Data<-data.frame(x,y)
Data
## x y
## 1 1.2 4.5
## 2 1.8 5.9
## 3 3.1 7.0
## 4 4.9 7.8
## 5 5.7 7.2
## 6 7.1 6.8
## 7 8.6 4.5
## 8 9.8 2.7
Mediante un modelo de regresión cuadrática se obtendrá:
##
## Call:
## lm(formula = y ~ x + I(x^2), data = Data)
##
## Residuals:
## 1 2 3 4 5 6 7 8
## -0.26186 0.27898 0.03863 0.16011 -0.30259 0.18757 -0.24086 0.14002
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.58779 0.34377 7.528 0.000655 ***
## x 2.06492 0.15094 13.680 3.74e-05 ***
## I(x^2) -0.21100 0.01366 -15.443 2.07e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2749 on 5 degrees of freedom
## Multiple R-squared: 0.9823, Adjusted R-squared: 0.9753
## F-statistic: 139.1 on 2 and 5 DF, p-value: 4.144e-05
Se puede observar que los datos se aproximan en un 98.23% a la función cuadrática \(f(x)=2.58+2.06X-0.211x^2\). Y su aproximación gráfica sería:
plot(x,y, pch=21, bg="turquoise", main="Aproximación")
beta<-reg.cuadratica$coefficients
x2<-seq(0,10,length.out = 100)
y2<-beta[1]+beta[2]*x2+beta[3]*x2^2
lines(x2,y2, col="red", lty=2)
grid(10, 10, lwd=2)
Ejemplo 2: Regresión logarítmica
Se tiene los siguientes datos
## # A tibble: 50 x 2
## Cantidad Costo
## <dbl> <dbl>
## 1 113 229.
## 2 130 234.
## 3 150 243.
## 4 164 240.
## 5 211 255.
## 6 255 257.
## 7 263 264.
## 8 266 263.
## 9 274 260.
## 10 282 262.
## # ... with 40 more rows
Mediante un modelo de regresión logarítmica se obtendrá:
##
## Call:
## lm(formula = Costo ~ log(Cantidad), data = DataEjemplo)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.3096 -1.7759 0.0033 2.0900 3.9221
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 50.5344 3.4367 14.7 <2e-16 ***
## log(Cantidad) 37.6227 0.5574 67.5 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.196 on 48 degrees of freedom
## Multiple R-squared: 0.9896, Adjusted R-squared: 0.9894
## F-statistic: 4556 on 1 and 48 DF, p-value: < 2.2e-16
La gráfica de la aproximación será esta:
plot(DataEjemplo$Cantidad, DataEjemplo$Costo, pch=22, bg="turquoise", main="Gráfica Costo vs Cantidad")
grid(5,5,lwd=3)
lines(DataEjemplo$Cantidad,r.logaritmica$fitted.values, col="red")
Ejemplo 3: Comparación de Modelos
Con ciertos datos que se presentarán a continuación, se elaborará un modelo de regresión cuadrática y de regresión lineal. Se realizará ambas gráficas, con las aproximaciones y se determinará qué modelo se ajusta mejor a los datos.
## # A tibble: 30 x 2
## Horas Costo
## <dbl> <dbl>
## 1 10 201
## 2 12 226
## 3 14 323
## 4 16 329
## 5 18 370
## 6 20 496
## 7 22 546
## 8 24 572
## 9 26 679
## 10 28 785
## # ... with 20 more rows
Creación de un modelo de regresión cuadrática:
##
## Call:
## lm(formula = Costo ~ Horas + I(Horas^2), data = DataEjemplo)
##
## Residuals:
## Min 1Q Median 3Q Max
## -45.865 -20.533 -7.435 23.256 54.025
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 184.67208 29.25493 6.313 9.33e-07 ***
## Horas -7.13014 1.67592 -4.254 0.000225 ***
## I(Horas^2) 1.02708 0.02108 48.731 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 30.89 on 27 degrees of freedom
## Multiple R-squared: 0.9995, Adjusted R-squared: 0.9994
## F-statistic: 2.628e+04 on 2 and 27 DF, p-value: < 2.2e-16
Los datos se ajustan a un 99.95 % mediante el modelo de regresión cuadrática. Visualmente puede corroborarse esta información:
plot(DataEjemplo$Horas, DataEjemplo$Costo, pch=22, bg="green", main="Gráfica de Costo vs Horas")
grid(5,5,lwd=3)
lines(DataEjemplo$Horas, r.cuadratica$fitted.values, col="red")
Se realiza ahora un modelo de regresión lineal:
##
## Call:
## lm(formula = Costo ~ Horas, data = DataEjemplo)
##
## Residuals:
## Min 1Q Median 3Q Max
## -330.6 -236.7 -111.1 219.5 548.0
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1069.735 128.746 -8.309 4.85e-09 ***
## Horas 72.982 3.017 24.188 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 286.1 on 28 degrees of freedom
## Multiple R-squared: 0.9543, Adjusted R-squared: 0.9527
## F-statistic: 585.1 on 1 and 28 DF, p-value: < 2.2e-16
Los datos se ajustan a un 95.43% mediante el modelo de regresión lineal. Visualmente puede corroborarse esta información:
plot(DataEjemplo$Horas, DataEjemplo$Costo, pch=22, bg="turquoise", main="Gráfica de Costo vs Horas")
grid(5,5, lwd=3)
lines(DataEjemplo$Horas, r.lineal$fitted.values, col="red")
Por lo tanto, el modelo que se aproxima mejor al costo, en función de las horas, es el de la regresión cuadrática.
Biblografía
- Galindo Villardón, M. P. et al. (s.f.). Introducción a la estadística. Castilla y León, España: Universidad de Salamanca.
- Schmuller, J. (2017). Statistical Analysis with R. New Jersey, USA: John Wiley & Sons, Inc.
- The Comprehensive R Archive Network. (s.f.). Recuperado de https://cran.r-project.org/, el 24 de noviembre de 2018.
- Vinuesa, P. (2016). Regresión lineal simple y polinomial. Morelos, México: UNAM.