Generación de Electricidad Mediante Molino de Viento

(Montgomery et al. (2001))

Un ingeniero investiga la posibilidad de generar electricidad mediante un molino de viento. Después de un tiempo ha registrado la corriente eléctrica que sale del molino y la velocidad del viento.

Lectura de datos

datos <- generacionEnergia.data <- read.table('../../data/molino.dat', header=TRUE)
dim(generacionEnergia.data)
## [1] 25  3
head(generacionEnergia.data)
##   obs velocidad voltaje
## 1   1       5.0   1.582
## 2   2       6.0   1.822
## 3   3       3.4   1.057
## 4   4       2.7   0.500
## 5   5      10.0   2.236
## 6   6       9.7   2.386

Estadísticos descriptivos de los datos.

summary(generacionEnergia.data, )
##       obs       velocidad         voltaje     
##  Min.   : 1   Min.   : 2.450   Min.   :0.123  
##  1st Qu.: 7   1st Qu.: 3.950   1st Qu.:1.144  
##  Median :13   Median : 6.000   Median :1.800  
##  Mean   :13   Mean   : 6.132   Mean   :1.610  
##  3rd Qu.:19   3rd Qu.: 8.150   3rd Qu.:2.166  
##  Max.   :25   Max.   :10.200   Max.   :2.386

Se grafican los datos.

with(datos,plot(velocidad, voltaje,
                  xlab="velocidad (mph) ", ylab="voltaje (kv)", main="Generación de Energía"))

Pareciera haber una leve curvatura, sin embargo se ajusta un modelo de regresión lineal simple y se despliega las tablas de regresión y de análisis de varianza

mod1 <- generacionEnergia.mod1 <- lm(voltaje ~ velocidad, data=generacionEnergia.data)
summary(generacionEnergia.mod1)
## 
## Call:
## lm(formula = voltaje ~ velocidad, data = generacionEnergia.data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.59869 -0.14099  0.06059  0.17262  0.32184 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)
## (Intercept)  0.13088    0.12599   1.039     0.31
## velocidad    0.24115    0.01905  12.659 7.55e-12
## 
## Residual standard error: 0.2361 on 23 degrees of freedom
## Multiple R-squared:  0.8745, Adjusted R-squared:  0.869 
## F-statistic: 160.3 on 1 and 23 DF,  p-value: 7.546e-12
anova(generacionEnergia.mod1)
## Analysis of Variance Table
## 
## Response: voltaje
##           Df Sum Sq Mean Sq F value    Pr(>F)
## velocidad  1 8.9296  8.9296  160.26 7.546e-12
## Residuals 23 1.2816  0.0557

En lugar de utilzar las gráficas de la regresión que R ofrece, se compilan las funciones yhatres.plot y normres.plot para la graficación de los residuales contra respuesta ajustada y en escala de probilidad normal.

source('../code/0-yhatres.plot.R')
source('../code/0-normres.plot.R') 

Gráficas comunes de residuales

opar <- par(no.readonly=TRUE)
par(mfrow=c(1,2), pty="s")
yhatres.plot(mod1)
title("Residuales vs. voltaje ajustado", cex.main=0.9)
normres.plot(mod1)
title("Gráfico de cuantil-cuantil normal", cex.main=0.9)
title("Gráficas de Residuales modelo 1", outer=TRUE, line=-2)

par(opar)

Mediante al análisis gráfico de los residuales se hace evidente el “mal ajuste” del modelo a los datos. Se sugiere la transformación \(X=1/x\) del regresor.

Se ajusta ahora \(y= \beta_0 + \beta_1 X + \epsilon\) y se obtiene

mod2 <- generacionEnergia.mod2 <- lm(voltaje ~ I(1/velocidad), data=generacionEnergia.data)
summary(generacionEnergia.mod2)
## 
## Call:
## lm(formula = voltaje ~ I(1/velocidad), data = generacionEnergia.data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.20547 -0.04940  0.01100  0.08352  0.12204 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)
## (Intercept)      2.9789     0.0449   66.34   <2e-16
## I(1/velocidad)  -6.9345     0.2064  -33.59   <2e-16
## 
## Residual standard error: 0.09417 on 23 degrees of freedom
## Multiple R-squared:   0.98,  Adjusted R-squared:  0.9792 
## F-statistic:  1128 on 1 and 23 DF,  p-value: < 2.2e-16
anova(generacionEnergia.mod2)
## Analysis of Variance Table
## 
## Response: voltaje
##                Df Sum Sq Mean Sq F value    Pr(>F)
## I(1/velocidad)  1 10.007 10.0072  1128.4 < 2.2e-16
## Residuals      23  0.204  0.0089

Con los correspondientes gráficos de los residuales

opar <- par(no.readonly=TRUE)
par(mfrow=c(1,2), pty="s")
yhatres.plot(mod2)
title("Residuales vs. voltaje ajustado", cex.main=0.9)
normres.plot(mod2)
title("Gráfico de cuantil-cuantil normal", cex.main=0.9)
title("Gráficas de Residuales modelo 2", outer=TRUE, line=-2)

par(opar)

Una manera alternativa de realizar el ajuste anterior sería definir la variable \(X\) en el marco de datos generacionEnergia.data y ajustar directamente con el regresor \(X\).

generacionEnergia.data$X <- 1/generacionEnergia.data$velocidad
head(generacionEnergia.data)
##   obs velocidad voltaje         X
## 1   1       5.0   1.582 0.2000000
## 2   2       6.0   1.822 0.1666667
## 3   3       3.4   1.057 0.2941176
## 4   4       2.7   0.500 0.3703704
## 5   5      10.0   2.236 0.1000000
## 6   6       9.7   2.386 0.1030928
with(generacionEnergia.data,plot(X,voltaje, xlab="1/velocidad", ylab="voltaje"))

mod3 <- generacionEnergia.mod3 <- lm(voltaje ~ X, data=generacionEnergia.data)
summary(generacionEnergia.mod3)
## 
## Call:
## lm(formula = voltaje ~ X, data = generacionEnergia.data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.20547 -0.04940  0.01100  0.08352  0.12204 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)
## (Intercept)   2.9789     0.0449   66.34   <2e-16
## X            -6.9345     0.2064  -33.59   <2e-16
## 
## Residual standard error: 0.09417 on 23 degrees of freedom
## Multiple R-squared:   0.98,  Adjusted R-squared:  0.9792 
## F-statistic:  1128 on 1 and 23 DF,  p-value: < 2.2e-16
anova(generacionEnergia.mod3)
## Analysis of Variance Table
## 
## Response: voltaje
##           Df Sum Sq Mean Sq F value    Pr(>F)
## X          1 10.007 10.0072  1128.4 < 2.2e-16
## Residuals 23  0.204  0.0089