Correlación Lineal y Regresión Lineal Simple
Correlación Lineal y Regresión Lineal Simple
Correlación Lineal y Regresión Lineal Simple
Correlación lineal
Coeficiente de Pearson
Jackknife correlation
Correlación parcial
Información sesión
Bibliografía
Correlación
Code
Hazlo antes de
lineal y Regresión acostarte y verás…
Mi Te
Introducción
La correlación lineal y la regresión lineal
simple son métodos estadísticos que
estudian la relación lineal existente entre
dos variables. Antes de profundizar en
cada uno de ellos, conviene destacar
algunas diferencias:
Correlación
lineal
Para estudiar la relación lineal existente
entre dos variables continuas es necesario
disponer de parámetros que permitan
cuantificar dicha relación. Uno de estos
parámetros es la covarianza, que indica el
grado de variación conjunta de dos
variables aleatorias.
0: asociación nula.
0.1: asociación pequeña.
0.3: asociación mediana.
0.5: asociación moderada.
0.7: asociación alta.
0.9: asociación muy alta.
La correlación de Spearman se
emplea cuando los datos son
ordinales, de intervalo, o bien cuando
no se satisface la condición de
normalidad para variables continuas y
los datos se pueden transformar a
rangos. Es un método no paramétrico.
Simple Prostate
Shrinking Solution
Helps Men Over 50
sponsored by: medicalhelp.…
Nutricionista Revela
Cómo Reducir La
Grasa Abdominal
sponsored by: Receitas Mo…
−−−−−
r√N − 2
t = −−−−− , df = N − 2
√1 − r 2
Coeficiente de
Pearson
Cov(X, Y )
ρ=
σx σy
Condiciones
Homocedasticidad: La varianza de Y
debe ser constante a lo largo de la
variable X . Esto se puede identificar
si en el scatterplot los puntos
mantienen la misma dispersión en las
distintas zonas de la variable X . Esta
condición no la he encontrado
mencionada en todos los libros.
Características
No varía si se aplican
transformaciones a las variables.
El coeficiente de correlación de
Pearson no equivale a la pendiente de
la recta de regresión.
Interpretación
Coeficiente de
Spearman
(Spearman’s rho)
El coeficiente de Spearman es el
equivalente al coeficiente de Pearson pero
con una previa transformación de los datos
a rangos. Se emplea como alternativa
cuando los valores son ordinales, o bien,
cuando los valores son continuos pero no
satisfacen la condición de normalidad
requerida por el coeficiente de Pearson y
se pueden ordenar transformándolos en
rangos. Al trabajar con rangos, es menos
sensible que Pearson a valores extremos.
Existe una diferencia adicional con
respecto a Pearson. El coeficiente de
Spearman requiere que la relación entre las
variables sea monótona, es decir, que
cuando una variable crece la otra también
lo hace o cuando una crece la otra decrece
(que la tendencia sea constante). Este
concepto no es exactamente el mismo que
linealidad.
6 ∑ di2
rs = 1 − ,
n(n2 − 1)
Coeficiente Tau de
Kendall
C−D
τ= 1 ,
2 n(n − 1)
Jackknife correlation
1 n
θ̄ (A,B) = Promedio Jackknife correlation (A,B) = ∑ ^r i
n i=1
Bias = (n − 1) ∗ (θ̄ − ^r )
Correlacion = min{ ^r 1 , ^r 2 , . . . , ^r n }
Ejemplo correlación
lineal
Hide
library(MASS)
library(ggplot2)
data("Cars93")
Hide
1.Análisis de normalidad
Hide
# Representación gráfica
par(mfrow = c(1, 2))
hist(Cars93$Weight, breaks = 10, main = "", xlab = "Weight", borde
hist(Cars93$Horsepower, breaks = 10, main = "", xlab = "Horsepower
border = "blue")
Hide
Hide
par(mfrow = c(1,1))
Hide
##
## Shapiro-Wilk normality test
##
## data: Cars93$Weight
## W = 0.97432, p-value = 0.06337
Hide
shapiro.test(Cars93$Horsepower)
##
## Shapiro-Wilk normality test
##
## data: Cars93$Horsepower
## W = 0.93581, p-value = 0.0001916
Hide
# Representación gráfica
par(mfrow = c(1, 2))
hist(log10(Cars93$Horsepower), breaks = 10, main = "", xlab = "Log
border = "blue")
qqnorm(log10(Cars93$Horsepower), main = "", col = "blue")
qqline(log10(Cars93$Horsepower))
Hide
##
## Shapiro-Wilk normality test
##
## data: log10(Cars93$Horsepower)
## W = 0.98761, p-value = 0.5333
2.Homocedasticidad
Hide
3.Cálculo de correlación
Hide
## [1] 0.809672
Hide
## [1] 0.8042527
Hide
4.Significancia de la correlación
Hide
cor.test(x = Cars93$Weight,
y = log10(Cars93$Horsepower),
alternative = "two.sided",
conf.level = 0.95,
method = "pearson")
##
## Pearson's product-moment correla
tion
##
## data: Cars93$Weight and log10(Ca
rs93$Horsepower)
## t = 13.161, df = 91, p-value < 2.
2e-16
## alternative hypothesis: true corr
elation is not equal to 0
## 95 percent confidence interval:
## 0.7256502 0.8699014
## sample estimates:
## cor
## 0.809672
Hide
cor.test(x = Cars93$Weight,
y = log10(Cars93$Horsepower),
alternative = "two.sided",
conf.level = 0.95,
method = "spearman")
##
## Spearman's rank correlation rho
##
## data: Cars93$Weight and log10(Ca
rs93$Horsepower)
## S = 26239, p-value < 2.2e-16
## alternative hypothesis: true rho
is not equal to 0
## sample estimates:
## rho
## 0.8042527
5.Coeficiente de determinación R2
(tamaño del efecto)
Hide
## [1] 0.6555688
Hide
## [1] 0.6468225
6.Conclusión
Ejemplo Jackknife
correlation
Hide
# Se introduce un outlier
a[5] <- 20
b[5] <- 16
datos <- data.frame(a,b)
plot(datos$a, type = "o", lty = 1, pch = 19, col = "firebrick",
ylab = "concentración", main = "Con outlier")
lines(datos$b, type = "o", pch = 19, lty = 1)
legend("topright", legend = c("A", "B"),
col = c("firebrick", "black"), lty = c(1,1), cex = 0.8)
Hide
## [1] 0.5249277
Hide
# Se elimina el outlier
a <- a[-5]
b <- b[-5]
datos_sin_outlier <- data.frame(a,b)
plot(datos_sin_outlier$a, type = "o", pch = 19, col = "firebrick",
ylab = "concentración", main = "Sin outlier")
lines(datos_sin_outlier$b, type = "o", pch = 19, lty = 1)
legend("topright", legend = c("A", "B"), col = c("firebrick", "bla
lty = c(1,1), cex = 0.8)
Hide
## [1] -0.1790631
Hide
for (i in 1:n) {
# Loop para excluir cada observación y calcular la correlación
valores_jackknife[i] <- cor(matriz[-i, 1], matriz[-i, 2], meth
}
## [1] 0.4854695
Hide
correlacion$valores_jackknife
Hide
correlacion$se
## [1] 0.697034
Hide
correlacion$bias
## [1] -0.3551246
Hide
Matriz de
correlaciones
Cuando se dispone de múltiples variables
y se quiere estudiar la relación entre todas
ellas se recurre al cálculo de matrices con
el coeficiente de correlación de cada par
de variables (pairwise correlation). También
se generan gráficos de dispersión dos a
dos. En R existen diferentes funciones que
permiten realizar este estudio, las
diferencias entre ellas son el modo en que
se representan gráficamente los
resultados.
Hide
data(iris)
#Se seleccionan únicamente las variables numéricas
datos <- iris[,c(1,2,3,4)]
head(datos)
Sepal.Length Sepal.Width
<dbl> <dbl>
1 5.1 3.5
2 4.9 3.0
3 4.7 3.2
4 4.6 3.1
5 5.0 3.6
6 5.4 3.9
Hide
Hide
## Sepal.Length Sepal.W
idth Petal.Length Petal.Width
## Sepal.Length 1.0000000 -0.117
5698 0.8717538 0.8179411
## Sepal.Width -0.1175698 1.000
0000 -0.4284401 -0.3661259
## Petal.Length 0.8717538 -0.428
4401 1.0000000 0.9628654
## Petal.Width 0.8179411 -0.366
1259 0.9628654 1.0000000
Hide
library(psych)
multi.hist(x = datos, dcol = c("blue", "red"), dlty = c("dotted",
main = "")
Hide
library(corrplot)
corrplot(corr = cor(x = datos, method = "pearson"), method = "numb
tl.cex = 0.7,number.cex = 0.8, cl.pos = "n")
Hide
library(psych)
pairs.panels(x = datos, ellipses = FALSE, lm = TRUE, method = "pea
Hide
library(GGally)
ggpairs(iris, lower = list(continuous = "smooth"),
diag = list(continuous = "bar"), axisLabels = "none")
Correlación
parcial
Como se ha explicado, la correlación
estudia la relación (lineal o monotónica)
existente entre dos variables. Puede ocurrir
que la relación que muestran dos variables
se deba a una tercera variable que influye
sobre las otras dos, a este fenómeno se le
conoce como confounding. Por ejemplo, si
se correlaciona el tamaño del pie de una
persona con su inteligencia, se encuentra
una correlación positiva alta. Sin embargo,
dicha relación se debe a una tercera
variable que está relacionada con las otras
dos, la edad. La correlación parcial permite
estudiar la relación lineal entre dos
variables bloqueando el efecto de una
tercera (o más) variables. Si el valor de
correlación de dos variables es distinto al
valor de correlación parcial de esas
mismas dos variables cuando se controla
una tercera, significa que la tercera variable
influye en las otras dos. La función en
pcor.test() del paquete ppcor permite
estudiar correlaciones parciales.
Ejemplo
Hide
library(MASS)
library(ggplot2)
data("Cars93")
#Se emplea el log del precio porque mejora la linealidad
ggplot(data = Cars93, aes(x = Weight, y = log(Price))) +
geom_point(colour = "red4") +
ggtitle("Diagrama de dispersión") +
theme_bw() +
theme(plot.title = element_text(hjust = 0.5))
Hide
library(ppcor)
cor.test(x = Cars93$Weight, y = log(Cars93$Price), method = "pears
##
## Pearson's product-moment correla
tion
##
## data: Cars93$Weight and log(Cars
93$Price)
## t = 11.279, df = 91, p-value < 2.
2e-16
## alternative hypothesis: true corr
elation is not equal to 0
## 95 percent confidence interval:
## 0.6629513 0.8370563
## sample estimates:
## cor
## 0.763544
Hide
Conclusión
Regresión lineal
simple
La información aquí presente recoge los
principales conceptos de la regresión
lineal. Se puede encontrar una descripción
mucho más detallada en los libros
Introduction to Statistical Learning y en
Linear Models with R.
Y = β0 + β1 X1 + ϵ
y^ = β^0 + β^1 x
n ¯¯)(y − ȳ¯¯)
∑ (x − x̄ Sy
β^1 = i=1 i i
n ¯¯ 2
= R
∑i=1(xi − x̄ ) Sx
Inferencia mediante
regresión lineal.
Significancia e
intervalo de confianza
para β0 y β1
β^1 − 0 β^0 − 0
t= ; t=
^
SE(β 1 ) SE(β^0 )
¯¯2
SE(β^0 )2 = σ 2 [ + ]
1 x̄
n ¯¯ 2
n ∑i=1(xi − x̄ )
2
σ
SE(β^1 ) =
2
∑ni=1(xi − x̄¯¯)2
Intervalos de confianza
β^0 ± tdf
α/2
SE(β^0 )
β^1 ± tdf
α/2
SE(β^1 )
Condiciones para la
regresión lineal
5. Independencia, Autocorrelación:
Las observaciones deben ser
independientes unas de otras. Esto es
importante tenerlo en cuenta cuando
se trata de mediciones temporales.
Puede detectarse estudiando si los
residuos siguen un patrón o
tendencia. Otro caso frecuente es el
de tener varias mediciones para un
mismo sujeto. En estos casos,
primero se obtiene la media de cada
uno y después se ajusta el modelo
empleando las medias.
Predicción de
valores
Hide
library(ggplot2)
ggplot(data = mtcars, aes(x = hp, y = mpg)) +
geom_point() +
geom_smooth(method = "lm", se = TRUE, color = "firebrick") +
theme_bw() + labs(x = "", y = "")
Ejemplo
Hide
6 rows
Hide
library(ggplot2)
ggplot(data = datos, mapping = aes(x = numero_bateos, y = runs)) +
geom_point(color = "firebrick", size = 2) +
labs(title = 'Diagrama de dispersión', x = 'número de bateo
theme_bw() +
theme(plot.title = element_text(hjust = 0.5))
Hide
##
## Pearson's product-moment correla
tion
##
## data: datos$numero_bateos and da
tos$runs
## t = 4.0801, df = 28, p-value = 0.
0003388
## alternative hypothesis: true corr
elation is not equal to 0
## 95 percent confidence interval:
## 0.3209675 0.7958231
## sample estimates:
## cor
## 0.610627
Hide
##
## Call:
## lm(formula = runs ~ numero_bateo
s, data = datos)
##
## Residuals:
## Min 1Q Median 3Q
Max
## -125.58 -47.05 -16.59 54.40
176.87
##
## Coefficients:
## Estimate Std. Err
or t value Pr(>|t|)
## (Intercept) -2789.2429 853.69
57 -3.267 0.002871 **
## numero_bateos 0.6305 0.15
45 4.080 0.000339 ***
## ---
## Signif. codes: 0 '***' 0.001
'**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 66.47 on
28 degrees of freedom
## Multiple R-squared: 0.3729, Adju
sted R-squared: 0.3505
## F-statistic: 16.65 on 1 and 28 D
F, p-value: 0.0003388
Hide
confint(modelo_lineal)
## 2.5 %
97.5 %
## (Intercept) -4537.9592982 -104
0.5264727
## numero_bateos 0.3139863
0.9471137
Hide
Hide
Hide
Hide
Hide
Hide
Hide
Hide
Hide
qqnorm(modelo_lineal$residuals)
qqline(modelo_lineal$residuals)
Hide
shapiro.test(modelo_lineal$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelo_lineal$residuals
## W = 0.96144, p-value = 0.337
Hide
Hide
# Test de Breush-Pagan
library(lmtest)
bptest(modelo_lineal)
##
## studentized Breusch-Pagan test
##
## data: modelo_lineal
## BP = 0.01269, df = 1, p-value =
0.9103
Autocorrelación de residuos:
Hide
Hide
library(ggrepel)
library(dplyr)
datos$studentized_residual <- rstudent(modelo_lineal)
ggplot(data = datos, aes(x = prediccion, y = abs(studentized_resid
geom_hline(yintercept = 3, color = "grey", linetype = "dashed")
# se identifican en rojo observaciones con residuos studentized
geom_point(aes(color = ifelse(abs(studentized_residual) > 3, 're
scale_color_identity() +
#se muestra el equipo al que pertenece la observación atípica
geom_text_repel(data = filter(datos, abs(studentized_residual) >
aes(label = equipos)) +
labs(title="Distribución de los residuos studentized", x="predic
theme_bw() +
theme(plot.title = element_text(hjust = 0.5), legend.position =
Hide
Hide
which(abs(datos$studentized_residual) > 3)
## [1] 7
Hide
library(car)
summary(influence.measures(model = modelo_lineal))
Hide
influencePlot(model = modelo_lineal)
4 rows
Hide
Hide
## (Intercept) numero_bateos
## -2789.24289 0.63055
Hide
## (Intercept) numero_bateos
## -2335.7478247 0.5479527
Conclusión
Evaluación de los
residuos de un modelo
lineal simple mediante
gráficos R
Hide
par(mfrow = c(1,2))
plot(modelo_lineal)
Hide
par(mfrow = c(1,1))
Apuntes varios
(miscellaneous)
En este apartado recojo comentarios,
definiciones y puntualizaciones que he ido
encontrando en diferentes fuentes y que, o
bien no he tenido tiempo de introducir en
el cuerpo principal del documento, o que
he considerado mejor mantenerlos al
margen como información
complementaria.
Significado de modelo
lineal
Linear Models with R, by Julian J. Faraway
y = β0 + β1 X1 + β2 log(X2 ) + ϵ
En contraposición, el siguiente no es un
modelo lineal:
β
y = β0 + β1 X1 2 + ϵ
Estimación de la
varianza de un modelo
lineal por mínimos
cuadrados
Linear Models with R, by Julian J. Faraway
RSS
σ2 =
n−p
Identificación de
outliers,
observaciones con
alto leverage y
observaciones
influyentes
Linear Models with R, by Julian J. Faraway
Hide
set.seed(123)
datos <- data.frame(x = 1:10, y = 1:10 + rnorm(10))
modelo_1 <- lm(y ~ x, data = datos)
Hide
Hide
β^ − β^i
Dfbetasi =
SEβ^i
Hide
library(faraway)
library(ggplot2)
data("savings")
savings$pais <- rownames(savings)
modelo_lineal <- lm(sr ~ pop15 + pop75 + dpi + ddpi, savings)
Hide
library(faraway)
library(ggplot2)
data(sexab)
head(sexab)
6 rows
Hide
## sexab$csa: Abused
## cpa ptsd
csa
## Min. :-1.115 Min. : 5.985
Abused :45
## 1st Qu.: 1.415 1st Qu.: 9.374
NotAbused: 0
## Median : 2.627 Median :11.313
## Mean : 3.075 Mean :11.941
## 3rd Qu.: 4.317 3rd Qu.:14.901
## Max. : 8.647 Max. :18.993
## ---------------------------------
---------------------------
## sexab$csa: NotAbused
## cpa ptsd
csa
## Min. :-3.1204 Min. :-3.349
Abused : 0
## 1st Qu.:-0.2299 1st Qu.: 3.544
NotAbused:31
## Median : 1.3216 Median : 5.794
## Mean : 1.3088 Mean : 4.696
## 3rd Qu.: 2.8309 3rd Qu.: 6.838
## Max. : 5.0497 Max. :10.914
Hide
Hide
csa ptsd
<fct> <dbl>
Abused 11.83464
NotAbused 12.38859
2 rows
Hide
##
## Two Sample t-test
##
## data: ptsd by csa
## t = 8.9387, df = 74, p-value = 2.
172e-13
## alternative hypothesis: true diff
erence in means is not equal to 0
## 95 percent confidence interval:
## 5.630165 8.860273
## sample estimates:
## mean in group Abused mean in g
roup NotAbused
## 11.941093
4.695874
ptsd = β0 + β1 dummyAbused
Hide
Hide
##
## Call:
## lm(formula = ptsd ~ abused, data
= sexab)
##
## Residuals:
## Min 1Q Median 3Q
Max
## -8.0451 -2.3123 0.0951 2.1645
7.0514
##
## Coefficients:
## Estimate Std. Error t
value Pr(>|t|)
## (Intercept) 4.6959 0.6237
7.529 1.00e-10 ***
## abused 7.2452 0.8105
8.939 2.17e-13 ***
## ---
## Signif. codes: 0 '***' 0.001
'**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.473 on
74 degrees of freedom
## Multiple R-squared: 0.5192, Adju
sted R-squared: 0.5127
## F-statistic: 79.9 on 1 and 74 D
F, p-value: 2.172e-13
Hide
## [1] 11.94109
Hide
## [1] 4.695874
Hide
## [1] 7.245219
Hide
##
## Call:
## lm(formula = ptsd ~ not_abused, d
ata = sexab)
##
## Residuals:
## Min 1Q Median 3Q
Max
## -8.0451 -2.3123 0.0951 2.1645
7.0514
##
## Coefficients:
## Estimate Std. Error t
value Pr(>|t|)
## (Intercept) 11.9411 0.5177
23.067 < 2e-16 ***
## not_abused -7.2452 0.8105
-8.939 2.17e-13 ***
## ---
## Signif. codes: 0 '***' 0.001
'**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.473 on
74 degrees of freedom
## Multiple R-squared: 0.5192, Adju
sted R-squared: 0.5127
## F-statistic: 79.9 on 1 and 74 D
F, p-value: 2.172e-13
Hide
##
## Call:
## lm(formula = ptsd ~ csa, data = s
exab)
##
## Residuals:
## Min 1Q Median 3Q
Max
## -8.0451 -2.3123 0.0951 2.1645
7.0514
##
## Coefficients:
## Estimate Std. Error
t value Pr(>|t|)
## (Intercept) 11.9411 0.5177
23.067 < 2e-16 ***
## csaNotAbused -7.2452 0.8105
-8.939 2.17e-13 ***
## ---
## Signif. codes: 0 '***' 0.001
'**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.473 on
74 degrees of freedom
## Multiple R-squared: 0.5192, Adju
sted R-squared: 0.5127
## F-statistic: 79.9 on 1 and 74 D
F, p-value: 2.172e-13
Hide
##
## Call:
## lm(formula = ptsd ~ csa, data = s
exab)
##
## Residuals:
## Min 1Q Median 3Q
Max
## -8.0451 -2.3123 0.0951 2.1645
7.0514
##
## Coefficients:
## Estimate Std. Error t
value Pr(>|t|)
## (Intercept) 4.6959 0.6237
7.529 1.00e-10 ***
## csaAbused 7.2452 0.8105
8.939 2.17e-13 ***
## ---
## Signif. codes: 0 '***' 0.001
'**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.473 on
74 degrees of freedom
## Multiple R-squared: 0.5192, Adju
sted R-squared: 0.5127
## F-statistic: 79.9 on 1 and 74 D
F, p-value: 2.172e-13
Estimación de los
parámetros de un
modelo de regresión
lineal mediante
descenso de
gradiente
Machine Learning by Andrew Ng, Stanford
University
Y = β0 + β1 X1 + ϵ
La tolerancia: Al tratarse de un
algoritmo iterativo, hay que indicar
una regla de parada. Lo idóneo es que
el algoritmo se detenga al encontrar el
mínimo, pero como normalmente se
desconoce cuál es, hay que conseguir
que se pare lo más cerca posible. Una
forma de cuantificar la proximidad al
mínimo es controlar cuanto desciende
el valor de la función entre iteraciones
consecutivas. Si el descenso es muy
pequeño, significa que se encuentra
muy cerca del valor. La tolerancia se
define como un valor tal que, si la
diferencia en el descenso es menor o
igual, se considera que se ha
alcanzado el mínimo (el algoritmo
converge). Una alternativa a calcular
la distancia entre las dos iteraciones
es medir la longitud del vector
gradiente en cada iteración. Si su
longitud es muy pequeña, también lo
es la distancia al mínimo.
1 n
J(β0 , β1 ) = ∑(yi − β0 − β1 xi )2
2 i=1
dJ 1 n n
= 2 ∗ ∑(yi − β0 − β1 xi ) ∗ −1 = − ∑(yi − β0 − β1 xi )
d(β0 ) 2 i=1 i=1
dJ 1 n n
= 2 ∗ ∑(yi − β0 − β1 xi ) ∗ −xi = − ∑(yi − β0 − β1 xi )xi
d(β1 ) 2 i=1 i=1
− ∑ni=1(yi − β0 − β1 xi )
[ n ]
− ∑i=1(yi − β0 − β1 xi )xi
Hide
x y
<dbl> <dbl>
1 1.4378876 8.628962
2 3.9415257 21.477451
3 2.0448846 13.783131
4 4.4150870 24.145943
5 4.7023364 25.640970
6 0.2277825 4.853977
6 rows
Hide
## (Intercept) x
## 2.117657 4.989068
Hide
# OPTIMIZACIÓN
# ================================================================
optimizacion_grad <- function(beta_0 = 0, beta_1 = 0, x, y, t = 0.
max_iter = 10000, tolerancia = 1e-10
for(i in 1:max_iter){
return(list(beta_0 = beta_0,
beta_1 = beta_1,
iteraciones = i,
estimaciones = as.data.frame(na.omit(estimaciones))
)
)
}
Hide
library(ggplot2)
ggplot(data = resultados$estimaciones,
aes(x = iteracion, y = beta0)) +
geom_path() +
geom_hline(yintercept = modelo_lm$coefficients[1], color = "firebr
theme_bw() +
ggtitle("Estimación de beta_0")
Hide
ggplot(data = resultados$estimaciones,
aes(x = iteracion, y = beta1)) +
geom_path() +
geom_hline(yintercept = modelo_lm$coefficients[2], color = "firebr
theme_bw() +
ggtitle("Estimación de beta_1")
Hide
ggplot(data = resultados$estimaciones,
aes(x = iteracion, y = residuos)) +
geom_path() +
theme_bw() +
ggtitle("Residuos del modelo")
Hide
for(i in c(1,5,10,100)) {
beta_0 <- round(resultados$estimaciones$beta0[i],3)
beta_1 <- round(resultados$estimaciones$beta1[i],3)
p <- ggplot(data = datos, aes(x = x, y = y)) +
geom_point() +
geom_abline(intercept = beta_0, slope = beta_1, color = "
ggtitle(paste("iteracion=", i, "Beta0=", beta_0, "Beta1="
theme_bw() +
theme(plot.title = element_text(size = 8))
print(p)
}
Hide
n <- 10000
set.seed(123)
x <- runif(n, min = 0, max = 5)
beta0 <- 2
beta1 <- 5
set.seed(123)
epsilon <- rnorm(n, sd = 1)
y <- beta0 + beta1 * x + epsilon
datos2 <- data.frame(x, y)
Hide
# OPTIMIZACIÓN
# ================================================================
optimizacion_grad <- function(beta_0 = 0, beta_1 = 0, x, y, t = 0.
max_iter = 10000, tolerancia = 1e-10
for(i in 1:max_iter){
return(list(beta_0 = beta_0,
beta_1 = beta_1,
iteraciones = i,
estimaciones = as.data.frame(na.omit(estimaciones))
)
)
}
Método de descenso
de gradiente
estocástico
(Stochastic Gradient
Descent)
Machine Learning by Andrew Ng, Stanford
University
Hide
for(j in 1:epochs){
estimaciones[j, 1] <- j
estimaciones[j, 2] <- beta_0
estimaciones[j, 3] <- beta_1
for(i in 1:length(x)){
}
}
return(list(beta_0 = beta_0,
beta_1 = beta_1,
epochs = j,
estimaciones = estimaciones))
}
Información
sesión
Hide
package loadedversion
<chr> <chr>
abind 1.4-5
assertthat 0.2.1
boot 1.3-25
callr 3.5.1
car 3.0-10
carData 3.0-4
cellranger 1.1.0
cli 2.1.0
colorspace 2.0-0
corrplot 0.84
Bibliografía
Linear Models with R by Julian J.Faraway libro
https://en.wikipedia.org/wiki/Resampling_(statistics)#Jackknife
Identifica flores,
árboles, malas…
PictureThis Instalar