Está en la página 1de 15

Mater Hidrologia: Regresion

Angel Udias
Sunday, August 24, 2014

Introduccin
El anlisis de regresin se utiliza para explicar una determinada variable, digamos Y, en funcin de una
variable X, o bien en funcin de varias variables X1, X2, . . . , Xk. En el primer caso se tratar de regresin
univariante, y en el segundo caso, de regresin multivariante. El modelo de explicacin en ambos casos es
lineal, esto es, se asume que la dependencia entre Y y las variable explicativa X adopta la forma:
Y = a + b X + error
O, en el caso multivariante:
Y = a + b1 X1 + b2 X2 + . . . + bk Xk.+ error
El trmino de error aparece porque cada vez que observamos una X, no siempre observaremos la misma Y.
Por ejemplo, si X es la estatura de una persona, e Y el peso, cada vez que observemos una estatura, no
siempre obtendremos el mismo peso en Y.
Los que hayis estudiado estadstica, conoceris el modelo perfectamente. Los que no, simplemente debis
saber que el modelo es til para predecir relaciones lineales, y para un estudio ms profundo, cualquier libro
de estadstica con un captulo de regresin sirve.

Correlacion entre variables

h0: existe correlacion entre las variables p-value: prob. de que las variables sean independientes (no exista
correl. entre ellas)
Generacin 50 datos para cada una de dos variables

x1 <- rnorm(50)
x3<-x1
# r de Pearson
cor.test(x3,x1)

##
## Pearson's product-moment correlation
##
## data: x3 and x1
## t = Inf, df = 48, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 1 1
## sample estimates:
## cor
## 1

plot(x3~x1)

1
3
2
1
x3

0
1
2

2 1 0 1 2 3

x1

#atencion que en este caso la H0 es que NO estan correlacionadas


#EL p-valor es muy pequeo luego se rechaza el test, con lo que SI estan correlacionadas
# el coeficiente de correlacion da un valor 1
x2 <- rnorm(50)
plot(x2~x1)

2
1.5
0.5
x2

0.5
1.5

2 1 0 1 2 3

x1

cor.test(x1,x2)

##
## Pearson's product-moment correlation
##
## data: x1 and x2
## t = 1.332, df = 48, p-value = 0.1892
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.09452 0.44382
## sample estimates:
## cor
## 0.1888

ahora p-valor alto y correlacion baja. Ambas variables son normales pero logicamente no estan correladas
El coef de correlacion de Spearman es igual que la del coeficiente de correlacin de Pearson. Oscila entre
-1 y +1, indicndonos asociaciones negativas o positivas respectivamente, 0 cero, significa no correlacin
pero no independencia. La tau de Kendall es un coeficiente de correlacin por rangos, inversiones entre dos
ordenaciones de una distribucin normal bivariante. Coef Cor SPERMAN es recomendable utilizarlo cuando
los datos presentan VALORES EXTREMOS ya que dichos valores afectan mucho el coeficiente de correlacin
de Pearson, o ante distribuciones NO NORMALES tau de Kendall

cor.test(x1,x2,method='kendall')

##

3
## Kendall's rank correlation tau
##
## data: x1 and x2
## z = 0.8114, p-value = 0.4171
## alternative hypothesis: true tau is not equal to 0
## sample estimates:
## tau
## 0.07918

# rho de Spearman
cor.test(x1,x2,method='spearman')

##
## Spearman's rank correlation rho
##
## data: x1 and x2
## S = 18472, p-value = 0.4335
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.113

#
x2 <- 0.75*x1 + rnorm(50)
plot(x2~x1)
4
2
x2

0
2

2 1 0 1 2 3

x1

4
cor.test(x1,x2)

##
## Pearson's product-moment correlation
##
## data: x1 and x2
## t = 6.728, df = 48, p-value = 1.925e-08
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.5189 0.8166
## sample estimates:
## cor
## 0.6966

el p-valor bajo, se rechaza H0. SI estan correlacionadas con un coef del ultimo valor que se vea

REGRESION LINEAL SIMPLE

A continuacin vamos a poner un ejemplo de regresin simple, realizado en R. Cargamos dos series de datos.
La primera son medidas de precipitacion y la segunda de caudal en un rio proximo a la estacion meteorologica.
Ambas medidas se corresponden a 10 dias

Prec=c(4, 10, 12, 0, 0, 6, 0, 13, 8, 12)


caudal = c(16, 26, 29, 11, 9, 17, 10, 28, 22, 24)

Una primera inspeccion visual siempre es muy util para estimar si ambas variables estan relacionadas
(DIAGRAMA DE DISPERSION)

plot(Prec, caudal)

5
25
caudal

20
15
10

0 2 4 6 8 10 12

Prec

plot(Prec, caudal,main="Diagrama de Dispersion",xlab="Precipitacion",ylab="Caudal")

6
Diagrama de Dispersion
25
Caudal

20
15
10

0 2 4 6 8 10 12

Precipitacion

Ahora podemos aplicar el modelo lineal de Regresion por Minimos Cuadrados

Mirecta<- lm(caudal ~ Prec)

Veamos el resultado del modelo linea

Mirecta

##
## Call:
## lm(formula = caudal ~ Prec)
##
## Coefficients:
## (Intercept) Prec
## 10.01 1.41

lo cual indica que el ajuste es una recta con la siguiente ecuacion Caudal = 10.014 + 1.413* prec

plot(Prec, caudal,pch=19,main="Recta de Regresion",cex.main=0.95)


abline(reg=Mirecta,lwd=1.5) #lwd: indica el grosor de la ninea

7
Recta de Regresion
25
caudal

20
15
10

0 2 4 6 8 10 12

Prec

Con la ecuacion podriamos dibujar la recta regresion. Pero ya lo hace R pch indica el tipo de punto. cex:
para el tamao del texto
El modelo de regresion nos da mas informacion:

summary(Mirecta)

##
## Call:
## lm(formula = caudal ~ Prec)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.973 -0.857 0.159 0.909 2.027
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 10.014 0.846 11.8 2.4e-06 ***
## Prec 1.413 0.103 13.7 7.8e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.63 on 8 degrees of freedom
## Multiple R-squared: 0.959, Adjusted R-squared: 0.954
## F-statistic: 188 on 1 and 8 DF, p-value: 7.78e-07

Tambien podiamos obtener solo el coeficiente de correlacion. el R-Squared mide la variabilidad de los datos

8
explicada por el modelo. En el ejemplo anterior es aproximadamente 0.90 lo que quiere decir que ms del
90% de la variabilidad de los datos fue recogida por el modelo: esto es, es un buen modelo.

cc<- cor(Prec,caudal)
cr =cc*cc #el coeficiente de correlacion al cuadrado es el coeficiente de regresion
cr # que logicamente coincide con el coefciente de regresion que nos daba el sumario

## [1] 0.9591

El modelo de regresion contiene aun mas informacion

attributes(Mirecta)

## $names
## [1] "coefficients" "residuals" "effects" "rank"
## [5] "fitted.values" "assign" "qr" "df.residual"
## [9] "xlevels" "call" "terms" "model"
##
## $class
## [1] "lm"

Los que hayan estudiado regresin con anterioridad reconocern varios de los nombres de la estructura
anterior.

Mirecta$coefficients #los coeficientes de la recta

## (Intercept) Prec
## 10.014 1.413

Mirecta$model #los datos

## caudal Prec
## 1 16 4
## 2 26 10
## 3 29 12
## 4 11 0
## 5 9 0
## 6 17 6
## 7 10 0
## 8 28 13
## 9 22 8
## 10 24 12

Naturalmente para cada dato concreto se comete un error. Dichos errores son los residuos. Si los queremos
ver para los datos de nuestro problema, escribiremos:

Mirecta$residuals #los residuos (error en cada punto)

## 1 2 3 4 5 6 7 8
## 0.33293 1.85389 2.02754 0.98563 -1.01437 -1.49341 -0.01437 -0.38563
## 9 10
## 0.68024 -2.97246

9
podemos dibujar los residuos

plot(Mirecta$residuals) #los residuos deberian ser aleatorios


abline(h=0) 2
1
Mirecta$residuals

0
1
2
3

2 4 6 8 10

Index

Hemos dibujamos una lnea horizontal en y=0 porque los residuos cumplen la propiedad de estar centrados
alrededor de dicha linea. Si en el grfico observamos algn dato que se aleja mucho por arriba o por abajo,
eso quiere decir que para ese dato, el modelo de regresin no predijo bien, dado que su residuo es elevado.
Eso quiere decir que tal dato no es bien explicado por el modelo, y as tenemos una forma de detectar tal
situacin. Por ejemplo, algo as podra pasar para el sueldo del director, tal vez.

Mirecta$fitted.value #los valores esperados de acuerdo al modelo

## 1 2 3 4 5 6 7 8 9 10
## 15.67 24.15 26.97 10.01 10.01 18.49 10.01 28.39 21.32 26.97

plot(Prec, caudal) #dibujamos los valores medidos


#la funcion points permite aadir puntos a un grafico previo
points(Prec, Mirecta$fitted.value,pch=15,col = "red") #y sobre el mismo grafico de dispersion los
legend(9,16,c("medidos","esperados"),col = c("red",9),lty=c(1,2), pch = c(19, 11), bg = 'gray90')

10
25
caudal

20
15

medidos
esperados
10

0 2 4 6 8 10 12

Prec

REGRESION LINEAL MULTIPLE

Funciona de similar manera al modelo de regresin lineal simple, con la diferencia de que lo que se estima es
un plano de regresin.
R Las librerias de R incluyen conjuntos de datos interesantes. Por ejemplo relativos a hidrologia: LakeHuron:
Level of Lake Huron 1875-1972 Nile: Flow of the River Nile precip: Annual Precipitation in US Cities rivers:
Lengths of Major North American Rivers
Vamos a cargar unos datos de R sobre coches (los cargamos de una DB incluida en las librerias de R):

data(mtcars)
attach(mtcars)

Vamos a intentar explicar el consumo (mpg) en funcin de la potencia (hp) y del peso (wt):

cars.lm = lm(mpg~hp+wt)
# Observemos que mpg es la variable que se explica, y el signo ms (+)
# indica slo yuxtaposicin, esto es,que las variables que explican con hp y wt:
# Observemos el resultado:
summary(cars.lm)

##
## Call:
## lm(formula = mpg ~ hp + wt)

11
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.941 -1.600 -0.182 1.050 5.854
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 37.22727 1.59879 23.28 < 2e-16 ***
## hp -0.03177 0.00903 -3.52 0.0015 **
## wt -3.87783 0.63273 -6.13 1.1e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.59 on 29 degrees of freedom
## Multiple R-squared: 0.827, Adjusted R-squared: 0.815
## F-statistic: 69.2 on 2 and 29 DF, p-value: 9.11e-12

Por tanto, el modelo es: millas recorridas por galn = 37.22 - 0.03 potencia - 3.87 peso Esto es, cuanto ms
potente es el coche, menos millas recorre (de ah el signo negativo de su coeficiente), y cuanto ms pesa,
menos millas recorre. El R-squared es del 82% , lo que quiere decir que esas dos variables explican bastante
bien el consumo.
Podemos dibujar los residuos para ver si hay algn coche que se comporta de modo muy distinto a los dems:

plot(cars.lm$residuals)
abline(h=0)
6
4
cars.lm$residuals

2
0
2
4

0 5 10 15 20 25 30

Index

12
Si queremos predecir las millas recorridas por galn por un coche con 150 caballos y peso 2.5:

predict.lm(cars.lm,data.frame(hp=150,wt=2.5))

## 1
## 22.77

REGRESION NO LINEAL

#Primera opcin: transformar los datos (log, sqrt, ...)


x <- rnorm(50,20,5)
y <- x^2 -10*x + 5*log(x) + rnorm(50,0,40)
plot(x,y)
800
600
y

400
200
0

15 20 25 30 35

ajl <- lm(y~x) #ajuste lineal


summary(ajl)

##
## Call:
## lm(formula = y ~ x)
##
## Residuals:

13
## Min 1Q Median 3Q Max
## -90.1 -39.6 -16.9 28.7 195.9
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -418.97 33.88 -12.4 <2e-16 ***
## x 32.85 1.65 20.0 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 59.6 on 48 degrees of freedom
## Multiple R-squared: 0.893, Adjusted R-squared: 0.89
## F-statistic: 399 on 1 and 48 DF, p-value: <2e-16

x2 <- x*x
lx <- log(x)
ajlm <- lm(y~x2+x+lx) #ajuste lineal incluyendo transformaciones de x

summary(ajlm)

##
## Call:
## lm(formula = y ~ x2 + x + lx)
##
## Residuals:
## Min 1Q Median 3Q Max
## -99.92 -19.87 -4.09 23.98 85.53
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1078.407 924.901 1.17 0.25
## x2 0.468 0.737 0.63 0.53
## x 46.129 62.342 0.74 0.46
## lx -662.398 626.204 -1.06 0.30
##
## Residual standard error: 37.3 on 46 degrees of freedom
## Multiple R-squared: 0.96, Adjusted R-squared: 0.957
## F-statistic: 365 on 3 and 46 DF, p-value: <2e-16

ajlmr <- step(ajlm,scope=list(lower=y~1,upper=y~.)) #ajuste optimizado

## Start: AIC=365.7
## y ~ x2 + x + lx
##
## Df Sum of Sq RSS AIC
## - x2 1 560 64487 364
## - x 1 761 64688 364
## - lx 1 1555 65482 365
## <none> 63927 366
##
## Step: AIC=364.1
## y ~ x + lx
##

14
## Df Sum of Sq RSS AIC
## <none> 64487 364
## + x2 1 560 63927 366
## - lx 1 105788 170275 411
## - x 1 271079 335566 445

summary(ajlmr) #el modelo slo es "similar" al original

##
## Call:
## lm(formula = y ~ x + lx)
##
## Residuals:
## Min 1Q Median 3Q Max
## -100.14 -17.64 -2.22 24.59 85.91
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1645.82 236.09 6.97 9.0e-09 ***
## x 85.51 6.08 14.06 < 2e-16 ***
## lx -1052.46 119.86 -8.78 1.8e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 37 on 47 degrees of freedom
## Multiple R-squared: 0.959, Adjusted R-squared: 0.958
## F-statistic: 554 on 2 and 47 DF, p-value: <2e-16

15

También podría gustarte