##
## Modelos de Regressão local
## Regressões por partes (e algumas segmentadas)
## Ver outrso scripts para diferentes modelos e mais sobre segmentada
##

## dados utilizados
eolica <- data.frame(
    vento = c(5.00, 6.00, 3.40, 2.70, 10.0, 9.70, 9.55, 3.05, 8.15, 6.20, 2.90, 6.35, 4.60, 5.80, 7.40, 3.60, 7.85, 8.80, 7.00, 5.45, 9.10, 10.2, 4.10, 3.95, 2.45),
    energia = c(1.582, 1.822, 1.057, 0.500, 2.236, 2.386, 2.294, 0.558, 2.166, 1.866, 0.653, 1.930, 1.562, 1.737, 2.088, 1.137, 2.179, 2.112, 1.800, 1.501, 2.303, 2.310, 1.194, 1.144, 0.123)
    )
##write.csv2(eolica, "eolica.csv", row.names = FALSE, quote = FALSE)
## 
with(eolica, plot(energia ~ vento))
#                  ylim=c(0, 2.5), xlim = c(0, 10.5)))

## criando data-frame para armazenar predições
preds <- data.frame(vento = seq(2,11, length=201))

##
## Ajustando médias
## (Polinômos de grau 0)
##

## uma média geral
(m1 <- lm(energia ~ 1, data = eolica))
preds$pm1 <- predict(m1, newdata = preds)
with(eolica, plot(energia ~ vento))
with(preds, lines(vento, pm1))

## duas médias
eolica$i1 <- with(eolica, ifelse(vento<6, 0, 1))
preds$i1 <- with(preds, ifelse(vento<6, 0, 1))
(m2 <- lm(energia ~ i1, data = eolica))
preds$pm2 <- predict(m2, newdata = preds)
with(subset(preds, vento < 6), lines(vento, pm2, col = 2))
with(subset(preds, vento > 6), lines(vento, pm2, col = 2))

## três médias
eolica$i2 <- with(eolica, ifelse(vento<8, 0, 1))
preds$i2 <- with(preds, ifelse(vento<8, 0, 1))
(m3 <- lm(energia ~ i1 + i2, data = eolica))
preds$pm3 <- predict(m3, newdata = preds)
with(subset(preds, vento < 6), lines(vento, pm3, col = 4))
with(subset(preds, vento > 6 & vento < 8), lines(vento, pm3, col = 4))
with(subset(preds, vento > 8), lines(vento, pm3, col = 4))
## ... etc

##
## Ajustando retas
## (Polinômos de grau 1)
##
preds <- data.frame(vento = seq(2,11, length=201))
with(eolica, plot(energia ~ vento))

## modelo global
(r1 <- lm(energia ~ vento, data = eolica))
preds$pr1 <- predict(r1, newdata = preds)
with(eolica, plot(energia ~ vento))
with(preds, lines(vento, pr1))

## retas paralelas
eolica$i5 <- with(eolica, ifelse(vento<5, 0, 1))
preds$i5 <- with(preds, ifelse(vento<5, 0, 1))

(r2 <- lm(energia ~ vento + i5, data = eolica))
preds$pr2 <- predict(r2, newdata = preds)
with(eolica, plot(energia ~ vento))
with(subset(preds, vento < 5), lines(vento, pr2))
with(subset(preds, vento > 5), lines(vento, pr2))

# mesmo intercepto
eolica$x5 <- with(eolica, ifelse(vento<5, 0, vento))
preds$x5 <- with(preds, ifelse(vento<5, 0, vento))

(r3 <- lm(energia ~ vento + x5, data = eolica))
preds$pr3 <- predict(r3, newdata = preds)
with(eolica, plot(energia ~ vento))
with(subset(preds, vento < 5), lines(vento, pr3))
with(subset(preds, vento > 5), lines(vento, pr3))

# regressão por partes
eolica$x5 <- with(eolica, ifelse(vento<5, 0, vento))
preds$x5 <- with(preds, ifelse(vento<5, 0, vento))

(r4 <- lm(energia ~ vento + i5 + x5, data = eolica))
preds$pr4 <- predict(r4, newdata = preds)
with(eolica, plot(energia ~ vento))
with(subset(preds, vento < 5), lines(vento, pr4))
with(subset(preds, vento > 5), lines(vento, pr4))

# regressão segmentada
eolica$xc5 <- with(eolica, ifelse(vento<5, 0, vento - 5))
preds$xc5 <- with(preds, ifelse(vento<5, 0, vento - 5))

(r5 <- lm(energia ~ vento + xc5, data = eolica))
preds$pr5 <- predict(r5, newdata = preds)
with(eolica, plot(energia ~ vento))
with(preds, lines(vento, pr5))

# regressão linear platô
eolica$cx5 <- with(eolica, ifelse(vento<5, vento, 5))
preds$cx5 <- with(preds, ifelse(vento<5, vento, 5))

(r6 <- lm(energia ~ cx5, data = eolica))
preds$pr6 <- predict(r6, newdata = preds)
with(eolica, plot(energia ~ vento))
with(preds, lines(vento, pr6))
