Se tiene una variable \(x\) denominada explicativa, regresora o independiente y una variable \(y\) denominada respuesta, regresada o dependiente.
Al tener un conjunto de pares de elementos de \(x\) y \(y\) se pretende construir un modelo que relacione de manera lineal y mediante una línea recta el comportamiento medio de \(y\) dado los valores de \(x\).
Es decir se trata de hallar los valores de \(\beta_0\) y \(\beta_1\) tal que puedan representar el siguiente sistema de ecuaciones:
\[ \begin{eqnarray} y_1 & = & \beta_0 + \beta_1 x_1 + \epsilon_1 \\ y_2 & = & \beta_0 + \beta_1 x_2 + \epsilon_2 \\ \vdots & = & \vdots \\ y_i & = & \beta_0 + \beta_1 x_i + \epsilon_i \\ \vdots & = & \vdots \\ y_n & = & \beta_0 + \beta_1 x_n + \epsilon_n \\ \end{eqnarray} \]
Donde el supesto más utilizado sobre los errores es:
\[ e_i \sim \mathcal{N}(0, \sigma^2) \] Donde \(\sigma^2\) el la varianza de los errores aleatorios.
En forma matricial se puede escribir:
\[ Y = X\beta + \epsilon \]
Donde:
\[ Y = \left[ \begin{matrix} y_1 \\ y_2 \\ \vdots \\ y_i \\ \vdots \\ y_n \end{matrix} \right], \qquad X = \left[ \begin{matrix} 1 & x_1 \\ 1 & x_2 \\ \vdots \\ 1 & x_i \\ \vdots \\ 1 & x_n \end{matrix} \right], \qquad \beta = \left[ \begin{matrix} \beta_0 \\ \beta_1 \\ \end{matrix} \right], \qquad \epsilon = \left[ \begin{matrix} \epsilon_1 \\ \epsilon_2 \\ \vdots \\ \epsilon_i \\ \vdots \\ \epsilon_n \end{matrix} \right] \]
Recordemos que la solución mínimo cuadrática para obtener los valores de \(\beta\) es:
\[ X'Y = X'X\beta \]
Al despejar el valor de \(\beta\) se tiene que:
\[ \begin{eqnarray} X'Y & = & X'X\beta \\ (X'X)^{-1}X'Y & = & (X'X)^{-1}(X'X)\beta \\ (X'X)^{-1}X'Y & = & I\beta \\ (X'X)^{-1}X'Y & = & \beta \\ \end{eqnarray} \]
Es decir que el estimador mínimo cuadrático para \(\beta\) es:
\[ \hat{\beta} = (X'X)^{-1}X'Y \]
Luego el valor estimado de \(Y\), es decir \(\hat{Y}\) es:
\[ \hat{Y} = X\hat{\beta} = X(X'X)^{-1}X'Y \]
A la matrix que toma los valores de \(Y\) y obtiene los valores de \(\hat{Y}\) se le denomina la matriz “hat” o sombrero y se denota por \(H\).
\[ H = X(X'X)^{-1}X' \]
Esta matriz tiene propiedades para identificar valores influenciales de los datos de \(X\).
El pecesito Langnose dace (Rhinichthys cataractae) habita en la corrientes de agua de Norteamérica.
En la página del John H. McDonald se encuentra una base de datos que el investigador menciona que fue tomada del sito del Maryland Biological Stream Suervey.
El MBSS realiza unos muestreos siguiendo un protocolo establecida para determinar la abundancia de peces en un tramo de la quebrada de 75 metros.
La base de datos tiene las siguientes columanas:
El interés es conocer e identificar las variables que influencian en la abundancia del pecesito.
Y constuir un modelo que permita estimar la abundancia esperada dada las características ambientales de la quebrada.
library(tidyverse)
## ── Attaching packages ────────────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse 1.2.1 ──
## ✔ ggplot2 3.0.0 ✔ purrr 0.2.5
## ✔ tibble 1.4.2 ✔ dplyr 0.7.6
## ✔ tidyr 0.8.1 ✔ stringr 1.3.1
## ✔ readr 1.1.1 ✔ forcats 0.3.0
## ── Conflicts ───────────────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
longnose <- read.table("datos_Longnose.txt", header = TRUE)
Hay 0.00404685642 Km\(^2\) en un acre.
longnose <- longnose %>%
mutate(areaKm2 = area * 0.00404685642)
longnose
## quebrada num_indiv area oxi_dis prof_max nitrato sulfato temperatura areaKm2
## 1 BASIN_RUN 13 2528 9.6 80 2.28 16.75 15.3 10.230453
## 2 BEAR_BR 12 3333 8.5 83 5.34 7.74 19.4 13.488172
## 3 BEAR_CR 54 19611 8.3 96 0.99 10.92 19.5 79.362901
## 4 BEAVER_DAM_CR 19 3570 9.2 56 5.44 16.53 17.0 14.447277
## 5 BEAVER_RUN 37 1722 8.1 43 5.66 5.91 19.3 6.968687
## 6 BENNETT_CR 2 583 9.2 51 2.26 8.81 12.9 2.359317
## 7 BIG_BR 72 4790 9.4 91 4.10 5.65 16.7 19.384442
## 8 BIG_ELK_CR 164 35971 10.2 81 3.20 17.53 13.8 145.569472
## 9 BIG_PIPE_CR 18 25440 7.5 120 3.53 8.20 13.7 102.952027
## 10 BLUE_LICK_RUN 1 2217 8.5 46 1.20 10.85 14.3 8.971881
## 11 BROAD_RUN 53 1971 11.9 56 3.25 11.12 22.2 7.976354
## 12 BUFFALO_RUN 16 12620 8.3 37 0.61 18.87 16.8 51.071328
## 13 BUSH_CR 32 19046 8.3 120 2.93 11.31 18.0 77.076427
## 14 CABIN_JOHN_CR 21 8612 8.2 103 1.57 16.09 15.0 34.851527
## 15 CARROLL_BR 23 3896 10.4 105 2.77 12.79 18.4 15.766553
## 16 COLLIER_RUN 18 6298 8.6 42 0.26 17.63 18.2 25.487102
## 17 CONOWINGO_CR 112 27350 8.5 65 6.95 14.94 24.1 110.681523
## 18 DEAD_RUN 25 4145 8.7 51 0.34 44.93 23.0 16.774220
## 19 DEEP_RUN 5 1175 7.7 57 1.30 21.68 21.8 4.755056
## 20 DEER_CR 26 8297 9.9 60 5.26 6.36 19.1 33.576768
## 21 DORSEY_RUN 8 7814 6.8 160 0.44 20.24 22.6 31.622136
## 22 FALLS_RUN 15 1745 9.4 48 2.19 10.27 14.3 7.061764
## 23 FISHING_CR 11 5046 7.6 109 0.73 7.10 19.0 20.420437
## 24 FLINTSTONE_CR 11 18943 9.2 50 0.25 14.21 18.5 76.659601
## 25 GREAT_SENECA_CR 87 8624 8.6 78 3.37 7.51 21.3 34.900090
## 26 GREENE_BR 33 2225 9.1 41 2.30 9.72 20.5 9.004256
## 27 GUNPOWDER_FALLS 22 12659 9.7 65 3.30 5.98 18.0 51.229155
## 28 HAINES_BR 98 1967 8.6 50 7.71 26.44 16.8 7.960167
## 29 HAWLINGS_R 1 1172 8.3 73 2.62 4.64 20.5 4.742916
## 30 HAY_MEADOW_BR 5 639 9.5 26 3.53 4.46 20.1 2.585941
## 31 HERRINGTON_RUN 1 7056 6.4 60 0.25 9.82 24.5 28.554619
## 32 HOLLANDS_BR 38 1934 10.5 85 2.34 11.44 12.0 7.826620
## 33 ISRAEL_CR 30 6260 9.5 133 2.41 13.77 21.0 25.333321
## 34 LIBERTY_RES 12 424 8.3 62 3.49 5.82 20.2 1.715867
## 35 LITTLE_ANTIETAM_CR 24 3488 9.3 44 2.11 13.37 24.0 14.115435
## 36 LITTLE_BEAR_CR 6 3330 9.1 67 0.81 8.16 14.9 13.476032
## 37 LITTLE_CONOCOCHEAGUE_CR 15 2227 6.8 54 0.33 7.60 24.0 9.012349
## 38 LITTLE_DEER_CR 38 8115 9.6 110 3.40 9.22 20.5 32.840240
## 39 LITTLE_FALLS 84 1600 10.2 56 3.54 5.69 19.5 6.474970
## 40 LITTLE_GUNPOWDER_R 3 15305 9.7 85 2.60 6.96 17.5 61.937138
## 41 LITTLE_HUNTING_CR 18 7121 9.5 58 0.51 7.41 16.0 28.817665
## 42 LITTLE_PAINT_BR 63 5794 9.4 34 1.19 12.27 17.5 23.447486
## 43 MAINSTEM_PATUXENT_R 239 8636 8.4 150 3.31 5.95 18.1 34.948652
## 44 MEADOW_BR 234 4803 8.5 93 5.01 10.98 24.3 19.437051
## 45 MILL_CR 6 1097 8.3 53 1.71 15.77 13.1 4.439401
## 46 MORGAN_RUN 76 9765 9.3 130 4.38 5.74 16.9 39.517553
## 47 MUDDY_BR 25 4266 8.9 68 2.05 12.77 17.0 17.263889
## 48 MUDLICK_RUN 8 1507 7.4 51 0.84 16.30 21.0 6.098613
## 49 NORTH_BR 23 3836 8.3 121 1.32 7.36 18.5 15.523741
## 50 NORTH_BR_CASSELMAN_R 16 17419 7.4 48 0.29 2.50 18.0 70.492192
## 51 NORTHWEST_BR 6 8735 8.2 63 1.56 13.22 20.8 35.349291
## 52 NORTHWEST_BR_ANACOSTIA_R 100 22550 8.4 107 1.41 14.45 23.0 91.256612
## 53 OWENS_CR 80 9961 8.6 79 1.02 9.07 21.8 40.310737
## 54 PATAPSCO_R 28 4706 8.9 61 4.06 9.90 19.7 19.044506
## 55 PINEY_BR 48 4011 8.3 52 4.70 5.38 18.9 16.231941
## 56 PINEY_CR 18 6949 9.3 100 4.57 17.84 18.6 28.121605
## 57 PINEY_RUN 36 11405 9.2 70 2.17 10.17 23.6 46.154397
## 58 PRETTYBOY_BR 19 904 9.8 39 6.81 9.20 19.2 3.658358
## 59 RED_RUN 32 3332 8.4 73 2.09 5.50 17.7 13.484126
## 60 ROCK_CR 3 575 6.8 33 2.47 7.61 18.0 2.326942
## 61 SAVAGE_R 106 29708 7.7 73 0.63 12.28 21.4 120.224011
## 62 SECOND_MINE_BR 62 2511 10.2 60 4.17 10.75 17.7 10.161656
## 63 SENECA_CR 23 18422 9.9 45 1.58 8.37 20.1 74.551189
## 64 SOUTH_BR_CASSELMAN_R 2 6311 7.6 46 0.64 21.16 18.5 25.539711
## 65 SOUTH_BR_PATAPSCO 26 1450 7.9 60 2.96 8.84 18.6 5.867942
## 66 SOUTH_FORK_LINGANORE_CR 20 4106 10.0 96 2.62 5.45 15.4 16.616392
## 67 TUSCARORA_CR 38 10274 9.3 90 5.45 24.76 15.0 41.577403
## 68 WATTS_BR 19 510 6.7 82 5.25 14.19 26.5 2.063897
## Función auxiliar para constuir un histograma en la diagonal de
## la matriz de dispersión tomado de la ayuda de comando `pairs()`.
panel.hist <- function(x, ...)
{
usr <- par("usr"); on.exit(par(usr))
par(usr = c(usr[1:2], 0, 1.5) )
h <- hist(x, plot = FALSE)
breaks <- h$breaks; nB <- length(breaks)
y <- h$counts; y <- y/max(y)
rect(breaks[-nB], 0, breaks[-1], y, col = "cyan", ...)
}
pairs(longnose[, -1], panel = panel.smooth,
cex = 1.5, pch = 24, bg = "light blue",
diag.panel = panel.hist, cex.labels = 2, font.labels = 2)
En particula se examinará el comportamiento de la abundancia del pecesito tomando en cuenta el área drenada hasta el sitio de muestreo.
ggplot(longnose, aes(areaKm2, num_indiv)) +
geom_point() +
geom_smooth(se = FALSE) +
geom_smooth(method = lm, se = FALSE, col = "red")
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Y <- as.matrix(longnose[, 2])
X <- as.matrix(cbind(1, longnose[, "areaKm2"]))
beta <- solve(t(X) %*% X) %*% t(X) %*% Y
beta
## [,1]
## [1,] 22.818155
## [2,] 0.522332
Y_est <- X %*% beta
Y_est
## [,1]
## [1,] 28.16185
## [2,] 29.86346
## [3,] 64.27194
## [4,] 30.36443
## [5,] 26.45812
## [6,] 24.05050
## [7,] 32.94327
## [8,] 98.85375
## [9,] 76.59330
## [10,] 27.50446
## [11,] 26.98446
## [12,] 49.49435
## [13,] 63.07764
## [14,] 41.02222
## [15,] 31.05353
## [16,] 36.13088
## [17,] 80.63066
## [18,] 31.57987
## [19,] 25.30187
## [20,] 40.35638
## [21,] 39.33541
## [22,] 26.50674
## [23,] 33.48440
## [24,] 62.85992
## [25,] 41.04759
## [26,] 27.52137
## [27,] 49.57678
## [28,] 26.97600
## [29,] 25.29553
## [30,] 24.16887
## [31,] 37.73315
## [32,] 26.90625
## [33,] 36.05056
## [34,] 23.71441
## [35,] 30.19110
## [36,] 29.85712
## [37,] 27.52559
## [38,] 39.97166
## [39,] 26.20024
## [40,] 55.16991
## [41,] 37.87054
## [42,] 35.06553
## [43,] 41.07295
## [44,] 32.97075
## [45,] 25.13700
## [46,] 43.45944
## [47,] 31.83564
## [48,] 26.00366
## [49,] 30.92670
## [50,] 59.63848
## [51,] 41.28222
## [52,] 70.48441
## [53,] 43.87374
## [54,] 32.76571
## [55,] 31.29662
## [56,] 37.50697
## [57,] 46.92607
## [58,] 24.72903
## [59,] 29.86135
## [60,] 24.03359
## [61,] 85.61501
## [62,] 28.12591
## [63,] 61.75863
## [64,] 36.15836
## [65,] 25.88317
## [66,] 31.49743
## [67,] 44.53536
## [68,] 23.89619
Para tener una estimación del temaño de muestra adecuado se requiere suponder loa valores “verdaderos” de \(\beta_0\) y \(\beta_1\) como también un valor de la varianza del error aleatorio \(\sigma^2\).
También se necesita determinar si el valor de \(X\) es aleatorio o son valores fijos.
En este contexto en particular los valores de \(x\) son aleatorios.
hist(X[, 2], nclass = 18,
main = "Histograma de frecuencia del área drenada",
freq = FALSE)
lines(density(X[, 2]), col = "blue", lwd = 2)
Para la simulación se tomarán valores aleatorios de los datos originales con reemplazamiento de las áreas drenadas.
segmentosX <- cut(X[, 2], seq(0, 160, 10))
desv_estandard <- tapply(Y, segmentosX, sd)
desv_estandard
## (0,10] (10,20] (20,30] (30,40] (40,50] (50,60] (60,70] (70,80] (80,90] (90,100]
## 27.152590 54.263401 19.737112 77.230522 24.846194 4.242641 NA 16.932218 NA NA
## (100,110] (110,120] (120,130] (130,140] (140,150] (150,160]
## NA NA NA NA NA NA
desv_est_estim <- mean(desv_estandard, na.rm = TRUE)
desv_est_estim
## [1] 32.05781
Se tiene entonces que:
beta0 <- 23
beta1 <- 0.5
sigma <- 32
sigma2 <- sigma ^ 2
# Para hacer la simulación reproducible.
# set.seed(0)
tam_muestra <- 50
x <- sort(sample(X[, 2], tam_muestra, replace = TRUE))
y <- beta0 + beta1 * x
e <- rnorm(tam_muestra, 0, sigma)
y <- y + e
y <- as.integer(round(y, 0))
# Los valores de y < 0 se remplazarán por 0
y[y < 0] <- 0
datos <- data.frame(x = x, y = y)
plot(datos, las = 1)
Y <- as.matrix(datos$y)
X <- as.matrix(cbind(1, datos$x))
betas_est <- solve(t(X) %*% X) %*% t(X) %*% Y
betas_est
## [,1]
## [1,] 23.6837518
## [2,] 0.4606606
est_param <- function(datos) {
Y <- as.matrix(datos[, "y"])
X <- as.matrix(cbind(1 , datos[, "x"]))
beta_est <- solve(t(X) %*% X) %*% t(X) %*% Y
return(beta_est)
}
est_param(datos)
## [,1]
## [1,] 23.6837518
## [2,] 0.4606606
gen_datos <- function(tam_muestra, beta0, beta1, sigma, x_orig){
x <- sort(sample(x_orig, tam_muestra, replace = TRUE))
y <- beta0 + beta1 * x
e <- rnorm(tam_muestra, 0, sigma)
y <- y + e
y <- as.integer(round(y, 0))
# Los valores de y < 0 se remplazarán por 0
y[y < 0] <- 0
datos <- cbind(x = x, y = y)
return(datos)
}
numsim <- 5000
tam_muestra <- 10
vector_tam_m <- rep(tam_muestra, numsim)
datosT <- lapply(vector_tam_m, gen_datos,
beta0 = beta0,
beta1 = beta1,
sigma = sigma,
x_orig = longnose$areaKm2)
datosT[1:3]
## [[1]]
## x y
## [1,] 1.715867 0
## [2,] 13.476032 0
## [3,] 16.231941 34
## [4,] 19.044506 13
## [5,] 19.384442 17
## [6,] 28.121605 68
## [7,] 31.622136 60
## [8,] 32.840240 46
## [9,] 32.840240 14
## [10,] 145.569472 76
##
## [[2]]
## x y
## [1,] 4.439401 1
## [2,] 8.971881 0
## [3,] 10.230453 32
## [4,] 19.437051 6
## [5,] 35.349291 99
## [6,] 46.154397 66
## [7,] 61.937138 45
## [8,] 76.659601 63
## [9,] 102.952027 46
## [10,] 102.952027 52
##
## [[3]]
## x y
## [1,] 6.968687 6
## [2,] 7.061764 34
## [3,] 7.826620 51
## [4,] 16.774220 3
## [5,] 23.447486 93
## [6,] 25.487102 0
## [7,] 34.900090 0
## [8,] 46.154397 13
## [9,] 76.659601 77
## [10,] 120.224011 106
parametros <- sapply(datosT, est_param)
parametros[, 1:5]
## [,1] [,2] [,3] [,4] [,5]
## [1,] 17.0578387 21.0705372 13.3631139 25.0368123 7.1233477
## [2,] 0.4618549 0.4248598 0.6822603 0.4955086 0.7652985
hist(parametros[1, ])
hist(parametros[2, ])
nivel_significancia <- 0.05
IC <- quantile(parametros[2, ],
c(nivel_significancia/2, (1-nivel_significancia/2)))
IC
## 2.5% 97.5%
## -0.4599897 1.3014837
IC - beta1
## 2.5% 97.5%
## -0.9599897 0.8014837