#1. Regresión lineal simple
Graficando la magnitud de los sismos y la cantidad de estaciones que lo detectaron del conjunto de datos quakes. ¿Se puede observar alguna relación entre estas variables?¿Cuál?
dataset <- datasets::quakes
plot(stations~mag,data=quakes)
Entonces, utilizamos la funcion lm para ajustar un modelo lineal de los datos:
lm.fit <- lm(stations~mag,data=quakes)
lm.fit
##
## Call:
## lm(formula = stations ~ mag, data = quakes)
##
## Coefficients:
## (Intercept) mag
## -180.42 46.28
summary(lm.fit)
##
## Call:
## lm(formula = stations ~ mag, data = quakes)
##
## Residuals:
## Min 1Q Median 3Q Max
## -48.871 -7.102 -0.474 6.783 50.244
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -180.4243 4.1899 -43.06 <2e-16 ***
## mag 46.2822 0.9034 51.23 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 11.5 on 998 degrees of freedom
## Multiple R-squared: 0.7245, Adjusted R-squared: 0.7242
## F-statistic: 2625 on 1 and 998 DF, p-value: < 2.2e-16
plot(stations~mag,data=quakes);abline(-180.4,46.28,col="magenta")
Podemos intentar predecir con este modelo lineal los valores utilizando la funcion predict.lm:
predict.lm(lm.fit,data.frame(mag=5))
## 1
## 50.98673
Igualmente, podemos predecir varios puntos a la vez:
pw <- c (4,4.5,5,5.5,6)
predict.lm(lm.fit,data.frame(mag=pw))
## 1 2 3 4 5
## 4.704516 27.845622 50.986727 74.127833 97.268938
Incorporaremos estos datos calculados a los datos que ya estaban en el conjunto de datos para ver que ocurre:
lat <- c(12.25,12.25,12.25,12.25,12.25)
long <- c(166.60,166.60,166.60,166.60,166.60)
depth <- c(123,123,123,123,123)
mag <- c(4.0,4.5,5.0,5.5,6.0)
stations <- c(4.704516,27.845622, 50.986727, 74.127833, 97.268938)
DnewData <- data.frame(lat=lat,long=long,depth=depth,mag=mag,stations=stations)
newdataset <- rbind(dataset,DnewData)
Ahora calculamos nuevamente la regresion lineal:
lm.fit <- lm(stations~mag,data=newdataset)
lm.fit
##
## Call:
## lm(formula = stations ~ mag, data = newdataset)
##
## Coefficients:
## (Intercept) mag
## -180.42 46.28
summary(lm.fit)
##
## Call:
## lm(formula = stations ~ mag, data = newdataset)
##
## Residuals:
## Min 1Q Median 3Q Max
## -48.871 -7.102 -0.359 6.757 50.244
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -180.4243 4.1404 -43.58 <2e-16 ***
## mag 46.2822 0.8923 51.87 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 11.47 on 1003 degrees of freedom
## Multiple R-squared: 0.7284, Adjusted R-squared: 0.7281
## F-statistic: 2690 on 1 and 1003 DF, p-value: < 2.2e-16
Como podemos ver, los coeficientes siguen siendo los mismos que antes de agregar estos datos.
Ahora veremos que ocurre si tomamos un punto muy por fuera de los datos y calculamos su regresion lineal:
#en este caso utilizaremos el primer dato x100 que aparece en la tabla de datos
datoExterno <- data.frame(lat=0,long=0,depth=0,mag=4.8*100,stations=41*100)
Extdataset <- rbind(dataset,datoExterno)
Calculamos la aproximacion lineal:
lm.fit <- lm(stations~mag,data=Extdataset)
lm.fit
##
## Call:
## lm(formula = stations ~ mag, data = Extdataset)
##
## Coefficients:
## (Intercept) mag
## -6.245 8.581
summary(lm.fit)
##
## Call:
## lm(formula = stations ~ mag, data = Extdataset)
##
## Residuals:
## Min 1Q Median 3Q Max
## -23.237 -13.372 -6.230 7.054 87.188
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6.24460 0.63578 -9.822 <2e-16 ***
## mag 8.58145 0.04008 214.122 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 19.05 on 999 degrees of freedom
## Multiple R-squared: 0.9787, Adjusted R-squared: 0.9787
## F-statistic: 4.585e+04 on 1 and 999 DF, p-value: < 2.2e-16
En este caso podemos ver que los coeficientes se ven muy alterados en comparacion con como estaban antes, ya que el intercepto paso de ~-180 a ~-6, mientras que “mag” paso de ~46 a ~8