Está en la página 1de 32

Geoestadística / 2023

Modelo Lineal General

Matrices

Generando Matrices

Comencemos generando distintas matrices desde la consola


A<-matrix(c(1,2,3,4,5,6),
nrow=2,
ncol=3,
byrow=FALSE)
A

## [,1] [,2] [,3]


## [1,] 1 3 5
## [2,] 2 4 6
A[1,] # extraigo elementos de la primera fila

## [1] 1 3 5
A[,2] # extraigo elementos de la segunda columna

## [1] 3 4
los argumentos nrow y ncol indican el número de filas y columnas, respectivamente. Por defecto la matriz se
llena por columnas ( byrow=FALSE ), de lo contrario, la matriz se llena con filas como en el ejemplo
B<-matrix(c(1,2,3,4,5,6),
nrow=2,
ncol=3,
byrow=TRUE)
B

## [,1] [,2] [,3]


## [1,] 1 2 3
## [2,] 4 5 6
Ver la diferencia entre
C<-matrix(c(1,2,3,4,5,6),
2,
3)
C

## [,1] [,2] [,3]


## [1,] 1 3 5
## [2,] 2 4 6
y

1
Matrices

D<-matrix(c(1,2,3,4,5,6),
2,
3,
byrow=TRUE)
D

## [,1] [,2] [,3]


## [1,] 1 2 3
## [2,] 4 5 6

Dimensiones y longitud

C<-matrix(c(1,2,3,4,5,6),
2,
3)
C

## [,1] [,2] [,3]


## [1,] 1 3 5
## [2,] 2 4 6
t(C) # trasposición

## [,1] [,2]
## [1,] 1 2
## [2,] 3 4
## [3,] 5 6
dim(C) # dimension

## [1] 2 3
dim(t(C))

## [1] 3 2
length(C) # cantidad de elementos

## [1] 6
x<-c(1,2)
x

## [1] 1 2
length(x)

## [1] 2
dim(x)

## NULL

Combinando matrices

Sigamos con las matrices generadas

2
Matrices

## [,1] [,2] [,3]


## [1,] 1 3 5
## [2,] 2 4 6
C

## [,1] [,2] [,3]


## [1,] 1 3 5
## [2,] 2 4 6
podríamos combinarlas
cbind(A,C) # combinacion por Columnas

## [,1] [,2] [,3] [,4] [,5] [,6]


## [1,] 1 3 5 1 3 5
## [2,] 2 4 6 2 4 6
o
rbind(A,C) # combinacion por Filas

## [,1] [,2] [,3]


## [1,] 1 3 5
## [2,] 2 4 6
## [3,] 1 3 5
## [4,] 2 4 6

Diagonales y traza

Generemos una matriz de 3x3


E<-matrix(c(1,2,3,4,5,6,7,8,9),
3,
3,
byrow=TRUE)
E

## [,1] [,2] [,3]


## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
diag(E) # extrae los elementos de la diagonal

## [1] 1 5 9
sum(diag(E)) # traza

## [1] 15
diag(rep(1, 5)) # matriz identidad de orden 5

## [,1] [,2] [,3] [,4] [,5]


## [1,] 1 0 0 0 0
## [2,] 0 1 0 0 0
## [3,] 0 0 1 0 0
## [4,] 0 0 0 1 0
3
Matrices

## [5,] 0 0 0 0 1

Determinantes e Inversas

Generemos una matriz cuadrada


G<-matrix(c(1,-2,2,2,0,1,1,1,-2),
3,
3,
byrow=TRUE)
G

## [,1] [,2] [,3]


## [1,] 1 -2 2
## [2,] 2 0 1
## [3,] 1 1 -2
y calculemos su determinante
det(G) # determinantes de la matriz

## [1] -7
Ahora a partir de la anterior, tomamos la dos primera columnas y agregamos una tercera columna que es
combinación lineal de la segunda
GG <- cbind(G[,1:2], G[,2]*3)
GG

## [,1] [,2] [,3]


## [1,] 1 -2 -6
## [2,] 2 0 0
## [3,] 1 1 3
y calculamos su determinante
det(GG)

## [1] 0
Asociemos eso con la existencia de inversa de una matriz
options(digits=3) # configuro digitos
invG <- solve(G) # inversa de la matriz
invG

## [,1] [,2] [,3]


## [1,] 0.143 0.286 0.286
## [2,] -0.714 0.571 -0.429
## [3,] -0.286 0.429 -0.571
invG %* %G

## [,1] [,2] [,3]


## [1,] 1.00e+00 0 0.00e+00
## [2,] -5.55e-17 1 -1.11e-16
## [3,] 0.00e+00 0 1.00e+00
round(invG %* %G,1) # devuelve I

## [,1] [,2] [,3]


4
Matrices

## [1,] 1 0 0
## [2,] 0 1 0
## [3,] 0 0 1

Cálculos con vectores y matrices

Algunas sumas algebraica de matrices y multiplicación de un escalar por matrices


A+B

## [,1] [,2] [,3]


## [1,] 2 5 8
## [2,] 6 9 12
A-B

## [,1] [,2] [,3]


## [1,] 0 1 2
## [2,] -2 -1 0
2*A

## [,1] [,2] [,3]


## [1,] 2 6 10
## [2,] 4 8 12
A*2

## [,1] [,2] [,3]


## [1,] 2 6 10
## [2,] 4 8 12
recordemos la trasposición
A

## [,1] [,2] [,3]


## [1,] 1 3 5
## [2,] 2 4 6
t(A) # trasposición

## [,1] [,2]
## [1,] 1 2
## [2,] 3 4
## [3,] 5 6
el resultado diferente del orden de los productos, en el caso de un vector
v <- c(3,7,9,8)
v %* %t(v) # resulta una matriz

## [,1] [,2] [,3] [,4]


## [1,] 9 21 27 24
## [2,] 21 49 63 56
## [3,] 27 63 81 72
## [4,] 24 56 72 64
t(v) %* %v # resulta un número

## [,1]
## [1,] 203
5
Matrices

y de matrices
A %* %t(B)

## [,1] [,2]
## [1,] 22 49
## [2,] 28 64
que recordemos no es conmutativo
A %* %B # que paso?

## Error in A %*% B: argumentos no compatibles


dim(A)

## [1] 2 3
dim(B)

## [1] 2 3
Generemos algunas matrices más
U<-matrix(c(1,2,3,4),
2,
2,
byrow=TRUE)

V<-matrix(c(5,6,7,8),
2,
2,
byrow=TRUE)

W<-matrix(c(2,2,3,5),
2,
2,
byrow=TRUE)

A<-matrix(c(1,2,3,4,5,6),
2,
3,
byrow=TRUE)

B<-matrix(c(1,2,3,4,5,6),
3,
2,
byrow=TRUE)

y usemos el soft para operar


U ; V; W

## [,1] [,2]
## [1,] 1 2
## [2,] 3 4
## [,1] [,2]
## [1,] 5 6
## [2,] 7 8
6
Matrices

## [,1] [,2]
## [1,] 2 2
## [2,] 3 5
A;B

## [,1] [,2] [,3]


## [1,] 1 2 3
## [2,] 4 5 6
## [,1] [,2]
## [1,] 1 2
## [2,] 3 4
## [3,] 5 6
U+V

## [,1] [,2]
## [1,] 6 8
## [2,] 10 12
2*U

## [,1] [,2]
## [1,] 2 4
## [2,] 6 8
A %* %B

## [,1] [,2]
## [1,] 22 28
## [2,] 49 64
B %* %A

## [,1] [,2] [,3]


## [1,] 9 12 15
## [2,] 19 26 33
## [3,] 29 40 51
U %* %V

## [,1] [,2]
## [1,] 19 22
## [2,] 43 50
V %* %U

## [,1] [,2]
## [1,] 23 34
## [2,] 31 46
U %* %A

## [,1] [,2] [,3]


## [1,] 9 12 15
## [2,] 19 26 33
U %* %t(B)

## [,1] [,2] [,3]


## [1,] 5 11 17
7
Matrices

## [2,] 11 25 39
U %* %W

## [,1] [,2]
## [1,] 8 12
## [2,] 18 26
W %* %U

## [,1] [,2]
## [1,] 8 12
## [2,] 18 26
V %* %W

## [,1] [,2]
## [1,] 28 40
## [2,] 38 54
W %* %V

## [,1] [,2]
## [1,] 24 28
## [2,] 50 58
A<-matrix(c(2,3,3,4),
2,
2,
byrow=TRUE)
A

## [,1] [,2]
## [1,] 2 3
## [2,] 3 4
solve(A)

## [,1] [,2]
## [1,] -4 3
## [2,] 3 -2
A %* %solve(A) # obtengo I

## [,1] [,2]
## [1,] 1 0
## [2,] 0 1
pero no siempre puedo garantizar las existencia de inversa
E<-matrix(c(1.3,9.1,1.2,8.4),
2,
2,
byrow=TRUE)
E

## [,1] [,2]
## [1,] 1.3 9.1
## [2,] 1.2 8.4
solve(E) # Matriz singular!!

8
Matrices

## Error in solve.default(E): sistema es computacionalmente singular: número de condición recíproco = 1.


det(E)

## [1] 2.31e-15
round(det(E))

## [1] 0
Pero en los casos que si, recordar que para una matriz cuadrada, al pre- o post-multiplicar por su inversa (si
existe!) obtengo la matriz identidad (I):
F<-matrix(c(1.2,9.1,1.3, 8.4),
2,
2,
byrow=TRUE)
F

## [,1] [,2]
## [1,] 1.2 9.1
## [2,] 1.3 8.4
solve(F)

## [,1] [,2]
## [1,] -4.800 5.200
## [2,] 0.743 -0.686
round(F %* %solve(F))

## [,1] [,2]
## [1,] 1 0
## [2,] 0 1
round(solve(F) %* %F)

## [,1] [,2]
## [1,] 1 0
## [2,] 0 1

9
Modelo de Regresión

Modelo de Regresión

Regresión Lineal Simple

Es el modelo más simple de regresión, siendo:

Yi = β0 + β1 Xi + i
2
considerando εi ∼ N (0, σ )
Trabajemos con un ejemplo, que evalúa la tasa de crecimiento de unas orugas en función de taninos en la
dieta
orugas <- read.table ("orugas.txt" , header = TRUE)
plot(orugas$crecimiento ~ orugas$taninos,
pch = 19,
xlab = " % taninos",
ylab = "tasa de crecimiento")
12
tasa de crecimiento

10
8
6
4
2

0 2 4 6 8

% taninos

El modelo ajustado por Mínimos Cuadrados Ordinarios sería


lm(crecimiento ~ taninos, data = orugas)

##
## Call:
## lm(formula = crecimiento ~ taninos, data = orugas)
##
## Coefficients:
## (Intercept) taninos
## 11.76 -1.22

10
Modelo de Regresión

que me otorga los coeficientes b0 = 11,76 y b1 = −1,22 como las estimaciones por Mínimos Cuadrados
Ordinarios. Es decir que, dados los datos, y habiendo seleccionado un modelo líneal , queremos encontrar los
valores de la pendiente y del intercepto que hagan más probable a los datos.
plot(orugas$crecimiento ~ orugas$taninos,
pch = 19,
xlab = " % taninos",
ylab = "tasa de crecimiento")
abline(lm(crecimiento ~ taninos, data = orugas)) # linea que pasa por a y b
12
tasa de crecimiento

10
8
6
4
2

0 2 4 6 8

% taninos

Esto lo podemos pensar para el caso del valor de la pendiente. Por ejemplo, dado una recta podemos visualizar
los segmentos entre el valor observado y el valor predicho por la recta; estos son los que conocemos como
residuos, residuales o error (en rojo en el gráfico).

11
Modelo de Regresión

12
tasa de crecimiento

10
8
6
4
2

0 2 4 6 8

% taninos

En esta gráfica tenemos los valores observados,y, que son los puntos negros y los valores predichos,
ŷ = b0 − b1 x, que son los que se encuentran en la recta, dado un valor de x.
modelo_orugas<-lm(crecimiento ~ taninos, data = orugas)
modelo_orugas$model$crecimiento # valores observados de y

## [1] 12 10 8 11 6 7 2 3 3
predict(modelo_orugas) # valores predichos de y

## 1 2 4 5 3 6 7 8 9
## 11.76 10.54 9.32
8.11 6.89 5.67 4.46 3.24 2.02
Uno desearía que la expresión (y − b0 − b1 x)2 tenga un resultado mínimo. Podríamos
P

cambiar el valor de la pendiente b


calcular el nuevo intercepto a
predecir los valores ajustados de crecimiento para cada nivel de tanino a
calcular los residuos
elevarlos al cuadrado y sumarlos, (y − b0 − b1 x)2
P
asociar este valor de SSE[i] a la estimación actual de la pendiente b[i].
La sigla SSE es la suma de cuadrados del error, de sus siglas en inglés. Eso me daría una gráfica:

12
Modelo de Regresión

24
23
22
sse

21
20
19

−1.4 −1.3 −1.2 −1.1 −1.0

## [1] -1.22
donde me interesa estimar el valor de b que hace “mínimo” el valor de SSE.

Calculos de la RLS

x2 , y2 y
P P P P P
Necesitamos los “famosos cinco”, x, y, xy, para estimar los parámetros. A partir de
ahí sus versiones corregidas:
P
P 2 ( x)2
SSX = x − n
P 2
( y)
SSY = y 2 − n
P
P P
P ( x)( y)
SSXY = xy − n
x <- orugas$taninos
y <- orugas$crecimiento

SSX <- sum(xˆ2)-sum(x)ˆ2/length(x)


SSX

## [1] 60
SSY <- sum(yˆ2)-sum(y)ˆ2/length(y)
SSY

## [1] 109
SSXY <- sum(x*y)- sum(x)*sum(y)/length(x)
SSXY

## [1] -73
13
Modelo de Regresión

SSXY
A partir de ahi, b = SSX
b <- SSXY/SSX
P P
y x
y a= n −b n
a <- mean(y)-b*mean(x)
a

## [1] 11.8
obteniendo y = 11,76 − 1,22x

Partición de la suma de cuadrados

La variación total en y, SSY puede ser asignada a la variación explicada por la regresión, suma de cuadrados
de la regresión SSR, más la variación no explicada por el modelo, la suma de cuadrados del error, SSE. Esto
quda expresado como SSY = SSR + SSE. La manera práctica, es calcular la SSR = b ∗ SSXY , dado que
conocemos b y como tenemos el valor de SSY , es por diferencia estimar SSE = SCY − SCR. Así se estima
para la tabla del ANOVA, (en R no aparece la fila de totales)
modelo_orugas <- lm (crecimiento ~ taninos, data = orugas)
summary.aov (modelo_orugas)

## Df Sum Sq Mean Sq F value Pr(>F)


## taninos 1 88.8 88.8 31 0.00085 ***
## Residuals 7 20.1 2.9
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
con los grados de libertdad de la tabla podems calcular el valor de F que debería superar, para rechazar la
hipóteis nula
qf(0.95,1,7)

## [1] 5.59
considerando un α = 0,05. Con la lógica del p-valor, la tabla tabla nos provee
1-pf(30.974,1,7)

## [1] 0.000846
La SSE la conocemos, es la expresión que deseamos minimizar previamente, SSE = (y − ŷ)2 . Además de
P
la tabla del ANOVA del modelo, podemos obtener la tabla resumen que nos otorga más informaición sobre
las estimaciones de los coefiecientes y valores del grado de ajuste como el R2 .
summary(modelo_orugas)

##
## Call:
## lm(formula = crecimiento ~ taninos, data = orugas)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.456 -0.889 -0.239 0.978 2.894
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 11.756 1.041 11.29 9.5e-06 ***
14
Modelo de Regresión

## taninos -1.217 0.219 -5.57 0.00085 ***


## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.69 on 7 degrees of freedom
## Multiple R-squared: 0.816, Adjusted R-squared: 0.789
## F-statistic: 31 on 1 and 7 DF, p-value: 0.000846
Más adelante habalremos más sobre la información contenida en este tipo de tablas.

Comprobación de la adecuación del modelo

Verificar que los supuestos no son violados, εi ∼ N (0, σ 2 ), es de relevancia para la inferencia asociada al
modelo. De manera gráfica
plot(modelo_orugas, which=1) # Res vs Pred

Residuals vs Fitted
3

4
2

6
Residuals

1
0
−1

7
−3

2 4 6 8 10 12

Fitted values
lm(crecimiento ~ taninos)
observados el grafico de Residuos vs Predicho. Y el otro de interés es el QQplot
plot(modelo_orugas, which=2) # QQplot

15
Modelo de Regresión

Normal Q−Q
2

4
Standardized residuals

1
0

3
−1

−1.5 −0.5 0.0 0.5 1.0 1.5

Theoretical Quantiles
lm(crecimiento ~ taninos)
La visualización de estos gráficos son de utilización frecuente para comprobar la adecuación de un modelo.

Regresión Lineal Múliple

El modelo de RLM, generaliza para mayor cantidad de regresoreas el modelo visto,


Yi = β0 + β1 Xi1 + ... + βp Xip + i
Para el modelo de RLS, existía una buena interpretación geométrica: podíamos visualizar el modelo como
una línea recta que atravesaba un gráfico de dispersión, es decir, una línea recta que atraviesa un diagrama
de dispersión o, en otras palabras, una línea en un espacio bidimensional. ¿Qué “aspecto” tiene el modelo
de ahora? Este modelo con p covariables producirá un hiperplano: con p covariables es un hiperplano en
un espacio de p + 1) dimensiones. Cualquier cosa por encima de dos covariables significa que no podemos
visualizar nuestra dispersión de puntos y el hiperplano resultante.
Veamos un ejemplo,
ozono <- read.table ("ozono_contaminacion.txt", header = TRUE)
head(ozono)

## rad temp viento ozono


## 1 190 67 7.4 41
## 2 118 72 8.0 36
## 3 149 74 12.6 12
## 4 313 62 11.5 18
## 5 299 65 8.6 23
## 6 99 59 13.8 19
puedo visualizar de a pares las relaciones
pairs (ozono)

16
Modelo de Regresión

60 80 0 100

rad

150
0
80

temp
60

15
viento

5
100

ozono
0

0 150 5 15

y ver resultados con la misma salida que trabajamos una RLS


mod_ozono <- lm (ozono ~ rad + temp + viento, ozono)
summary (mod_ozono)

##
## Call:
## lm(formula = ozono ~ rad + temp + viento, data = ozono)
##
## Residuals:
## Min 1Q Median 3Q Max
## -40.49 -14.21 -3.56 10.12 95.60
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -64.2321 23.0420 -2.79 0.0063 **
## rad 0.0598 0.0232 2.58 0.0112 *
## temp 1.6512 0.2534 6.52 2.4e-09 ***
## viento -3.3376 0.6538 -5.10 1.4e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 21.2 on 107 degrees of freedom
## Multiple R-squared: 0.606, Adjusted R-squared: 0.595
## F-statistic: 54.9 on 3 and 107 DF, p-value: <2e-16

17
Modelo de Regresión

Modelo de clasificación

El modelo de clasificación (ANOVA clásico) a una vía es:

yij = µ + αi + ij

Donde yij es la observación j en el grupo i, µ es la media global, αi es el efecto del grupo i y ij es el error
aleatorio asociado con la observación yij . El objetivo es probar si hay diferencias significativas entre las medias
de los grupos. Veamos un ejemplo.
Un experimento en el que los rendimientos de los cultivos por unidad de área fueron medido de 10 campos
seleccionados al azar en cada uno de los tres tipos de suelo. Todos los campos fueron sembrados con la misma
variedad de semilla y provistos de los mismos insumos de fertilizantes y control de plagas. La pregunta es si
el tipo de suelo afecta significativamente el rendimiento del cultivo y, de ser así, en qué medida.
rend <- read.table ("rendimiento.txt", header = TRUE)
rend

## arenoso arcilloso limoso


## 1 6 17 13
## 2 10 15 16
## 3 8 3 9
## 4 6 11 12
## 5 14 14 15
## 6 17 12 16
## 7 9 12 17
## 8 11 8 13
## 9 7 10 18
## 10 11 13 14
Necesitamos pasar los datos de wide format a long format,
rend_largo <- stack (rend)
head (rend_largo)

## values ind
## 1 6 arenoso
## 2 10 arenoso
## 3 8 arenoso
## 4 6 arenoso
## 5 14 arenoso
## 6 17 arenoso
por defecto los nombres de las variables son values e ind, pero podemos modificarlas
names (rend_largo) <- c ("rendimiento", "suelo")
head (rend_largo)

## rendimiento suelo
## 1 6 arenoso
## 2 10 arenoso
## 3 8 arenoso
## 4 6 arenoso
## 5 14 arenoso
## 6 17 arenoso

18
Modelo de Regresión

Variables indicadoras

Ahora que si tenemos las variables en el formato para trabajar, necesitamos en pensar como incorporar la
varible categórica de una manera utilizable por le software. Nosotros tenesmo 3 categorías en total, por lo
que podemos pensar en dos variables binarias
(
1 si el suelo es arcilloso
xi1 =
0 de lo contrario
(
1 si el suelo es limoso
xi2 =
0 de lo contrario

yi = β0 + β1 xi1 + β2 xi1 + i
Se sabe que x1 y x2 son variables indicadores (“ficticias” o “dummy”), y:
El suelo es arcilloso si xi1 = 1 (en cuyo caso xi1 = 0);
El suelo es limoso si xi1 = 1 (en cuyo caso xi1 = 0);
El suelo es arenoso si xi1 = 0 y xi1 = 0.
El rendimiento medio de un suelo arenoso se describe mediante el intercepto β0 . Si consideramos suelos
arcilloso o limoso, entonces el adicional β1 o β2 describe la diferencia de rendimiento medio entre el arenoso y
cualquier otro tipo de suelo. Lo que tenemos son tres modelos de sólo interceptos: se permite que el intercepto
cambie según la categoría. En términos más generales, cuando tenemos al menos una variable categórica como
covariable, el intercepto puede cambiar para las observaciones de diferentes categorías (si hay diferencias en
el resultado entre las categorías). En nuestro ejemplo, sueloarenoso se considera la categoría de referencia,
pero es una elección arbitraria: cualquiera de las categorías sirve. Cuando ejecutamos un modelo de regresión
múltiple para los datos de rendimiento, vemos que R crea automáticamente las variables ficticias necesarias.
mod_rend <- lm (rendimiento ~ suelo, data = rend_largo)
summary (mod_rend )

##
## Call:
## lm(formula = rendimiento ~ suelo, data = rend_largo)
##
## Residuals:
## Min 1Q Median 3Q Max
## -8.5 -1.8 0.3 1.7 7.1
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 9.90 1.08 9.16 9e-10 ***
## sueloarcilloso 1.60 1.53 1.05 0.3046
## suelolimoso 4.40 1.53 2.88 0.0077 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.42 on 27 degrees of freedom
## Multiple R-squared: 0.239, Adjusted R-squared: 0.183
## F-statistic: 4.24 on 2 and 27 DF, p-value: 0.025
Podemos ver que el rendimiento medio de los suelos arenosos es de 9,9, mientras que la diferencia entre los
rendimientos de los suelos arcillosos y arenosos es de 1,6. En algunos casos, no importa qué categoría se elija
19
Modelo de Regresión

como referencia. Pero si uno quisiera el cambio de categoría de referencia puede realizarse reordenando las
categorías mediante la función factor().
rend_largo$suelo <- factor (rend_largo$suelo, levels = c ("limoso", "arcilloso", "arenoso"))
# la primera categoria queda como referencia
mod_rend_2 <- lm (rendimiento ~ suelo, data = rend_largo)
summary (mod_rend_2)

##
## Call:
## lm(formula = rendimiento ~ suelo, data = rend_largo)
##
## Residuals:
## Min 1Q Median 3Q Max
## -8.5 -1.8 0.3 1.7 7.1
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 14.30 1.08 13.23 2.6e-13 ***
## sueloarcilloso -2.80 1.53 -1.83 0.0781 .
## sueloarenoso -4.40 1.53 -2.88 0.0077 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.42 on 27 degrees of freedom
## Multiple R-squared: 0.239, Adjusted R-squared: 0.183
## F-statistic: 4.24 on 2 and 27 DF, p-value: 0.025
Crear tablas de variables indicadoreas para su uso en modelos estadísticos es extremadamente fácil con la
función model.matrix (). Veremos lo que hace la función con un ejemplo sencillo, pdiendo a R que extraiga el
modelo matricial (X) utilizado en nuestro dos ejempls.
model.matrix(mod_rend)

## (Intercept) sueloarcilloso suelolimoso


## 1 1 0 0
## 2 1 0 0
## 3 1 0 0
## 4 1 0 0
## 5 1 0 0
## 6 1 0 0
## 7 1 0 0
## 8 1 0 0
## 9 1 0 0
## 10 1 0 0
## 11 1 1 0
## 12 1 1 0
## 13 1 1 0
## 14 1 1 0
## 15 1 1 0
## 16 1 1 0
## 17 1 1 0
## 18 1 1 0
## 19 1 1 0
## 20 1 1 0
## 21 1 0 1
20
Modelo de Regresión

## 22 1 0 1
## 23 1 0 1
## 24 1 0 1
## 25 1 0 1
## 26 1 0 1
## 27 1 0 1
## 28 1 0 1
## 29 1 0 1
## 30 1 0 1
## attr(,"assign")
## [1] 0 1 1
## attr(,"contrasts")
## attr(,"contrasts")$suelo
## [1] "contr.treatment"
y comparar
model.matrix(mod_rend_2)

## (Intercept) sueloarcilloso sueloarenoso


## 1 1 0 1
## 2 1 0 1
## 3 1 0 1
## 4 1 0 1
## 5 1 0 1
## 6 1 0 1
## 7 1 0 1
## 8 1 0 1
## 9 1 0 1
## 10 1 0 1
## 11 1 1 0
## 12 1 1 0
## 13 1 1 0
## 14 1 1 0
## 15 1 1 0
## 16 1 1 0
## 17 1 1 0
## 18 1 1 0
## 19 1 1 0
## 20 1 1 0
## 21 1 0 0
## 22 1 0 0
## 23 1 0 0
## 24 1 0 0
## 25 1 0 0
## 26 1 0 0
## 27 1 0 0
## 28 1 0 0
## 29 1 0 0
## 30 1 0 0
## attr(,"assign")
## [1] 0 1 1
## attr(,"contrasts")
## attr(,"contrasts")$suelo
## [1] "contr.treatment"
21
Modelo de Regresión

Interpretar en el contexto de las variables de referencia en cada caso.

ANOVA a una vía

Retomemos el ejemplo, pero en la aplicación directa para resolver este tipo de ejercicios. Partimos de los
datos, rend_largo , que graficamos
plot(rendimiento ~ suelo, data = rend_largo)
15
rendimiento

10
5

limoso arcilloso arenoso

suelo

comprobamos la homogeneidad de varianza


bartlett.test(rendimiento ~ suelo, data = rend_largo)

##
## Bartlett test of homogeneity of variances
##
## data: rendimiento by suelo
## Bartlett's K-squared = 1, df = 2, p-value = 0.5
a partir de esto, generamos el modelo
mod_rend <- aov(rendimiento ~ suelo, data = rend_largo)
anova(mod_rend) # es la manera "clásica"

## Analysis of Variance Table


##
## Response: rendimiento
## Df Sum Sq Mean Sq F value Pr(>F)
## suelo 2 99.2 49.6 4.24 0.025 *
## Residuals 27 315.5 11.7
## ---
22
Modelo de Regresión

## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
y al darnos diferencias significativas, intentaremos hacer comparaciones a posteriorr
TukeyHSD(mod_rend)

## Tukey multiple comparisons of means


## 95% family-wise confidence level
##
## Fit: aov(formula = rendimiento ~ suelo, data = rend_largo)
##
## $suelo
## diff lwr upr p adj
## arcilloso-limoso -2.8 -6.59 0.99 0.179
## arenoso-limoso -4.4 -8.19 -0.61 0.020
## arenoso-arcilloso -1.6 -5.39 2.19 0.555

Comprendiendo el resultado de la RLM

Tomemos la tabla resumen de nuestro modelo como ejemplo


summary (mod_ozono)

##
## Call:
## lm(formula = ozono ~ rad + temp + viento, data = ozono)
##
## Residuals:
## Min 1Q Median 3Q Max
## -40.49 -14.21 -3.56 10.12 95.60
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -64.2321 23.0420 -2.79 0.0063 **
## rad 0.0598 0.0232 2.58 0.0112 *
## temp 1.6512 0.2534 6.52 2.4e-09 ***
## viento -3.3376 0.6538 -5.10 1.4e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 21.2 on 107 degrees of freedom
## Multiple R-squared: 0.606, Adjusted R-squared: 0.595
## F-statistic: 54.9 on 3 and 107 DF, p-value: <2e-16
Lo primero que aparece es el modelo. Y posteriormente la descriptiva de los residuos. Un residuo o residual
es la diferencia entre un resultado observado para un valor específico de la(s) covariable(s), y el resultado
predicho por el modelo utilizando el mismo valor o valores de la/s covariable. res = yobservado − ŷpredicho .
Posteriormente está la tabla de coeficientes, sus estimados por Mínimos Cuadrados; el primero es el intercepto
y el resto de los coeficeintes de regresión, obteniendo el modelo predicho:

ŷ = −64,23 + 0,06 ∗ rad + 1,65 ∗ temp + −3,34 ∗ viento

Además se suman tres columnas asociadas con las pruebas de los coeficientes individuales:
Error estándar : error estándar del coeficiente de regresión estimado;

23
Modelo de Regresión

t valor: El estadístico t para la hipótesis nula de que el coeficiente de regresión es cero. Se calcula como
el cociente entre el coefiencite de regresión estimado y su error estándar;
Pr(>|t|) : p-valor resultante de la prueba t anterior.
Las pruebas serían
(
H0 : βj = 0 dadas las demás covariables del modelo.
H1 : βj 6= 0 dadas las demás covariables del modelo.

Se trata de una prueba importante: si la hipótesis nula es cierta, equivale a dejar la jésima covariable
fuera del modelo. Esto significa que la covariable no ayuda a explicar la variabilidad del resultado. La
hipótesis alternativa, por supuesto, es que permanece en el modelo: que esta covariable concreta sí ayuda a
explicar la variabilidad del resultado. La prueba subyacente es una prueba t: el estadístico de la prueba que
aparece en la columna del valor t se compara con una distribución t con n − p) grados de libertad, donde n
es el número de observaciones y p es el número de coeficientes de regresión que hay que estimar (incluida la
ordenada).
Estas pruebas de hipótesis pueden utilizarse para comprobar si un único coeficiente de regresión es distinto
de cero. No deberíamos eliminar múltiples covariables simultáneamente basándonos en que sus valores p son
todos “demasiado grandes”: esto no es lo que se está comprobando aquí. Podría ocurrir que dos o más de
los valores p de los coeficientes de regresión sean demasiado grandes, lo que puede llevarnos a pensar que
podríamos eliminar estas covariables simultáneamente. Recordar que la hipótesis está condicionada a que
todas las demás variables estén presentes, por lo que, aunque puede que no haya pruebas para retener a la
covariable A en el modelo cuando B está presente, y ninguna evidencia para retener la covariable B en el
modelo cuando A está presente, esto no significa que podamos eliminar ambas (A y B).

Aparece también la desviación típica residual ( CM E). Es la estimación muestral de la desviación
estándar (σ) del término del error ().
Una medida útil que podemos extraer de un modelo es el coeficiente de determinación, comúnmente
conocido como R2 (“R al cuadrado”). Se trata de una escala entre 0 y 1 que mide la proporción de variabilidad
del resultado que es explicada por las covariables del modelo.
En la salida de R, hay dos versiones de R2 : el R-cuadrado múltiple y el R-cuadrado ajustado. El R-cuadrado
ajustado intenta evitar una propiedad indeseable del R2: añadir covariables a un modelo nunca reducirá el
R2. Esto no es deseable, ya que artificialmente nuestro R2 aumentaría simplemente aumentando el número
de covariables que utilizamos en el modelo. El R2 ajustado incluye una penalización para evitar que esto
ocurra: cuantas más covariables que añada a su modelo, mayor será la penalización.
Al final hay una prueba F, que a veces se conoce como Análisis de Varianza para la regresión (o ANOVA para
la regresión). Se trata de una prueba estadística bastante estricta, pero sirve como herramienta contundente
para evaluar el modelo. Supongamos que el modelo que está construyendo tiene un intercepto, b0 , y otros
coeficientes de regresión p para p covariables. La hipótesis en cuestión es
(
H0 : β1 = ... = βp = 0
H1 : al menos una de las β1 , ..., βp es distinta de 0

La hipótesis nula puede reformularse como “eliminar todas las covariables del modelo”. Esto parece extremo,
pero nos dice algo sobre si las covariables tienen algún poder para describir el resultado. Si no logramos
rechazar esta hipótesis, probablemente no tengamos entre manos un modelo muy útil.
anova (mod_ozono)

## Analysis of Variance Table


##
## Response: ozono
## Df Sum Sq Mean Sq F value Pr(>F)
24
Modelo de Regresión

## rad 1 14780 14780 33.0 8.9e-08 ***


## temp 1 47378 47378 105.7 < 2e-16 ***
## viento 1 11680 11680 26.1 1.4e-06 ***
## Residuals 107 47964 448
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Que es lo que esta calculando sobre el modelo:
la primera fila de la salida compara el modelo con rad con el modelo de sólo intercepto mediante una
prueba F;
la segunda fila de la salida compara el modelo con rad + temp con el modelo con sólo rad mediante
una prueba F;
La tercera fila de la salida compara el modelo con rad + temp + viento con el modelo con rad + temp
mediante una prueba F.
En el momento en que recogemos la fila correspondiente a la última covariable introducida en el test ANOVA,
estamos comparando el modelo “completo” con el modelo con la covariable introducida en el test ANOVA.
Esto es idéntico a la prueba t para el viento que aparece en la salida lm(), porque la prueba F en este caso
especial es matemáticamente idéntica a la prueba t del lm().
Importante. . . en el ANOVA, el orden de las variables en el modelo es relevante!. Se puede
comprobar
mod_ozono_2 <-lm (ozono ~ viento + rad + temp, data=ozono)
summary (mod_ozono_2)

##
## Call:
## lm(formula = ozono ~ viento + rad + temp, data = ozono)
##
## Residuals:
## Min 1Q Median 3Q Max
## -40.49 -14.21 -3.56 10.12 95.60
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -64.2321 23.0420 -2.79 0.0063 **
## viento -3.3376 0.6538 -5.10 1.4e-06 ***
## rad 0.0598 0.0232 2.58 0.0112 *
## temp 1.6512 0.2534 6.52 2.4e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 21.2 on 107 degrees of freedom
## Multiple R-squared: 0.606, Adjusted R-squared: 0.595
## F-statistic: 54.9 on 3 and 107 DF, p-value: <2e-16
anova (mod_ozono_2)

## Analysis of Variance Table


##
## Response: ozono
## Df Sum Sq Mean Sq F value Pr(>F)
## viento 1 45762 45762 102.1 < 2e-16 ***
## rad 1 9044 9044 20.2 1.8e-05 ***
## temp 1 19032 19032 42.5 2.4e-09 ***
25
Modelo Lineal General

## Residuals 107 47964 448


## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Modelo Lineal General

El modelo lineal general puede expresarse matemáticamente de la siguiente manera:

Y = Xβ + 

Donde:
Y es un vector columna de n observaciones de la variable respuesta.
X es una matriz n × p de los valores de las p variables predictoras en las n observaciones.
β es un vector columna de p coeficientes de regresión desconocidos que queremos estimar.
 es un vector columna de n errores aleatorios que representan la variación no explicada por el modelo.
En forma matricial, esta ecuación se expresa como:
 
    β0  
y1 1 x11 x12 ... x1p   1
 y2  1 β
 1   2 
x21 x22 ... x2p 
 ..  =  .. ..  β2  +  .. 
      
.. .. ..
 .  . . . . .  . .
 .. 
yn 1 xn1 xn2 ... xnp n
βp

Donde yi es la observación de la variable respuesta en la i-ésima observación, y xij es el valor de la variable


predictora j en la i-ésima observación. El coeficiente β0 es el intercepto del modelo, y los coeficientes
β1 , β2 , . . . , βp son los coeficientes de regresión que miden la asociación entre cada variable predictora y la
variable respuesta.
El supuesto distribucional del término del error en el modelo lineal general es que sigue una distribución
normal con media cero y varianza constante σ 2 :

 ∼ N (0, σ 2 I)

Donde  es el vector de las perturbaciones aleatorias, N (0, σ 2 I) indica que sigue una distribución normal
multivariante con media cero y varianza-covarianza σ 2 I, siendo I la matriz identidad.
La regresión lineal (simple y múltiple), el análisis de la varianza (ANOVA) y el análisis de la covarianza
(ANCOVA ) son todos de esta forma y a veces se denominan conjuntamente modelos lineales generales.
La estimación por Mínimos Cuadrados Ordinarios (OLS, por sus siglas en inglés) del vector de coeficientes de
regresión β en el modelo lineal general se puede expresar como:

β̂ = (X T X)−1 X T Y

Donde β̂ es el vector de estimaciones de coeficientes de regresión, X T es la matriz transpuesta de X, y


(X T X)−1 es la inversa de la matriz producto de X T y X.
Esta fórmula nos proporciona los valores estimados de los coeficientes de regresión que mejor se ajustan a los
datos observados. Una vez que se han obtenido estas estimaciones, se pueden utilizar para hacer predicciones
de la variable respuesta Y para nuevas observaciones.
26
Modelo Lineal General

Los supuestos del modelo bajo los cuáles serán válidas nuestras inferencias son los siguientes:
1. los εi tienen media cero, E(εi ) = 0.
2. los εi tienen todos la misma varianza desconocida que llamaremos σ 2 y que es el otro parámetro
del modelo, V ar(εi ) = σ 2
3. los εi tienen distribución normal
4. los εi son independientes entre sí, y no están correlacionados con las xi .

Estos cuatro supuestos pueden resumirse en

εi ∼ N (0, σ 2 ) 1≤i≤n independientes entre sí

En función de esto el vector de los residuos en el modelo lineal general se puede calcular como la diferencia
entre el vector de la variable respuesta observada y el vector de la variable respuesta estimada por el modelo:

ˆ = Y − X β̂

Donde ˆ es el vector de los residuos, Y es el vector de la variable respuesta en las observaciones, X es la


matriz de diseño de las variables predictoras en las observaciones y β̂ es el vector de coeficientes de regresión
estimados por Mínimos Cuadrados Ordinarios.

Estimaciones de nuestros ejemplos

Datos Regresión Lineal Simple


Y <- modelo_orugas$model$crecimiento
Y

## [1] 12 10 8 11 6 7 2 3 3
X <- model.matrix(modelo_orugas)
X

## (Intercept) taninos
## 1 1 0
## 2 1 1
## 3 1 2
## 4 1 3
## 5 1 4
## 6 1 5
## 7 1 6
## 8 1 7
## 9 1 8
## attr(,"assign")
## [1] 0 1
Beta_estimados <- solve(t(X) %* %X) %* %t(X) %* %Y
Beta_estimados

## [,1]
## (Intercept) 11.76
## taninos -1.22
modelo_orugas

27
Modelo Lineal General

##
## Call:
## lm(formula = crecimiento ~ taninos, data = orugas)
##
## Coefficients:
## (Intercept) taninos
## 11.76 -1.22
Datos Regresión Lineal Múltiple
Y <- mod_ozono$model$ozono
Y

## [1] 41 36 12 18 23 19 8 16 11 14 18 14 34 6 30 11 1 11
## [19] 4 32 23 45 115 37 29 71 39 23 21 37 20 12 13 135 49 32
## [37] 64 40 77 97 97 85 10 27 7 48 35 61 79 63 16 80 108 20
## [55] 52 82 50 64 59 39 9 16 122 89 110 44 28 65 22 59 23 31
## [73] 44 21 9 45 168 73 76 118 84 85 96 78 73 91 47 32 20 23
## [91] 21 24 44 21 28 9 13 46 18 13 24 16 13 23 36 7 14 30
## [109] 14 18 20
X <- model.matrix(mod_ozono)
X

## (Intercept) rad temp viento


## 1 1 190 67 7.4
## 2 1 118 72 8.0
## 3 1 149 74 12.6
## 4 1 313 62 11.5
## 5 1 299 65 8.6
## 6 1 99 59 13.8
## 7 1 19 61 20.1
## 8 1 256 69 9.7
## 9 1 290 66 9.2
## 10 1 274 68 10.9
## 11 1 65 58 13.2
## 12 1 334 64 11.5
## 13 1 307 66 12.0
## 14 1 78 57 18.4
## 15 1 322 68 11.5
## 16 1 44 62 9.7
## 17 1 8 59 9.7
## 18 1 320 73 16.6
## 19 1 25 61 9.7
## 20 1 92 61 12.0
## 21 1 13 67 12.0
## 22 1 252 81 14.9
## 23 1 223 79 5.7
## 24 1 279 76 7.4
## 25 1 127 82 9.7
## 26 1 291 90 13.8
## 27 1 323 87 11.5
## 28 1 148 82 8.0
## 29 1 191 77 14.9
## 30 1 284 72 20.7
## 31 1 37 65 9.2
28
Modelo Lineal General

## 32 1 120 73 11.5
## 33 1 137 76 10.3
## 34 1 269 84 4.0
## 35 1 248 85 9.2
## 36 1 236 81 9.2
## 37 1 175 83 4.6
## 38 1 314 83 10.9
## 39 1 276 88 5.1
## 40 1 267 92 6.3
## 41 1 272 92 5.7
## 42 1 175 89 7.4
## 43 1 264 73 14.3
## 44 1 175 81 14.9
## 45 1 48 80 14.3
## 46 1 260 81 6.9
## 47 1 274 82 10.3
## 48 1 285 84 6.3
## 49 1 187 87 5.1
## 50 1 220 85 11.5
## 51 1 7 74 6.9
## 52 1 294 86 8.6
## 53 1 223 85 8.0
## 54 1 81 82 8.6
## 55 1 82 86 12.0
## 56 1 213 88 7.4
## 57 1 275 86 7.4
## 58 1 253 83 7.4
## 59 1 254 81 9.2
## 60 1 83 81 6.9
## 61 1 24 81 13.8
## 62 1 77 82 7.4
## 63 1 255 89 4.0
## 64 1 229 90 10.3
## 65 1 207 90 8.0
## 66 1 192 86 11.5
## 67 1 273 82 11.5
## 68 1 157 80 9.7
## 69 1 71 77 10.3
## 70 1 51 79 6.3
## 71 1 115 76 7.4
## 72 1 244 78 10.9
## 73 1 190 78 10.3
## 74 1 259 77 15.5
## 75 1 36 72 14.3
## 76 1 212 79 9.7
## 77 1 238 81 3.4
## 78 1 215 86 8.0
## 79 1 203 97 9.7
## 80 1 225 94 2.3
## 81 1 237 96 6.3
## 82 1 188 94 6.3
## 83 1 167 91 6.9
## 84 1 197 92 5.1
## 85 1 183 93 2.8
29
Modelo Lineal General

## 86 1 189 93 4.6
## 87 1 95 87 7.4
## 88 1 92 84 15.5
## 89 1 252 80 10.9
## 90 1 220 78 10.3
## 91 1 230 75 10.9
## 92 1 259 73 9.7
## 93 1 236 81 14.9
## 94 1 259 76 15.5
## 95 1 238 77 6.3
## 96 1 24 71 10.9
## 97 1 112 71 11.5
## 98 1 237 78 6.9
## 99 1 224 67 13.8
## 100 1 27 76 10.3
## 101 1 238 68 10.3
## 102 1 201 82 8.0
## 103 1 238 64 12.6
## 104 1 14 71 9.2
## 105 1 139 81 10.3
## 106 1 49 69 10.3
## 107 1 20 63 16.6
## 108 1 193 70 6.9
## 109 1 191 75 14.3
## 110 1 131 76 8.0
## 111 1 223 68 11.5
## attr(,"assign")
## [1] 0 1 2 3
Beta_estimados <- solve(t(X) %* %X) %* %t(X) %* %Y
Beta_estimados

## [,1]
## (Intercept) -64.2321
## rad 0.0598
## temp 1.6512
## viento -3.3376
mod_ozono

##
## Call:
## lm(formula = ozono ~ rad + temp + viento, data = ozono)
##
## Coefficients:
## (Intercept) rad temp viento
## -64.2321 0.0598 1.6512 -3.3376
Datos Clasifiación a una vía
Y <- mod_rend$model$rendimiento
Y

## [1] 6 10 8 6 14 17 9 11 7 11 17 15 3 11 14 12 12 8 10 13 13 16 9 12 15
## [26] 16 17 13 18 14

30
Modelo Lineal General

X <- model.matrix(mod_rend)
X

## (Intercept) sueloarcilloso sueloarenoso


## 1 1 0 1
## 2 1 0 1
## 3 1 0 1
## 4 1 0 1
## 5 1 0 1
## 6 1 0 1
## 7 1 0 1
## 8 1 0 1
## 9 1 0 1
## 10 1 0 1
## 11 1 1 0
## 12 1 1 0
## 13 1 1 0
## 14 1 1 0
## 15 1 1 0
## 16 1 1 0
## 17 1 1 0
## 18 1 1 0
## 19 1 1 0
## 20 1 1 0
## 21 1 0 0
## 22 1 0 0
## 23 1 0 0
## 24 1 0 0
## 25 1 0 0
## 26 1 0 0
## 27 1 0 0
## 28 1 0 0
## 29 1 0 0
## 30 1 0 0
## attr(,"assign")
## [1] 0 1 1
## attr(,"contrasts")
## attr(,"contrasts")$suelo
## [1] "contr.treatment"
Beta_estimados <- solve(t(X) %* %X) %* %t(X) %* %Y
Beta_estimados

## [,1]
## (Intercept) 14.3
## sueloarcilloso -2.8
## sueloarenoso -4.4
lm(mod_rend)

##
## Call:
## lm(formula = mod_rend)
##
## Coefficients:
31
Corolario

## (Intercept) sueloarcilloso sueloarenoso


## 14.3 -2.8 -4.4
Como ese observa en los tres casos presentados, el método matricial y computacional para resolver nuestros
modelos es el mismo.

Corolario

Trabajamos con la regresión lineal (simple y múltiple) y el análisis de varianza (ANOVA). La regresión es
el método estándar para relacionar una variable de respuesta continua con varias variables explicativas
(o predictoras) continuas. El ANOVA se utiliza para una variable de respuesta continua y variables
explicativas categóricas o cualitativas (factores). Si bien no lo abordamos, el análisis de covarianza
(ANCOVA) se utiliza cuando al menos una de las variables explicativas es continua. Hoy en día es
habitual utilizar las mismas herramientas computacionales para todas estas situaciones.
El concepto de Modelo Lineal General se utiliza para abarcar toda la gama de métodos de análisis
de una variable de respuesta continua, que cumple los supuestos  ∼ N (0, σ 2 I) y múltiples variables
explicativas.

32

También podría gustarte