Actividad 1

Para esta actividad se utilizará el conjunto de datos “Cars”

cars <- datasets::cars
plot(speed~dist,data = cars)

Ahora, utilizamos la funcion lm para ajustar un modelo lineal de los datos del dataset:

lm.fit <- lm(speed~dist,data = cars)
lm.fit
## 
## Call:
## lm(formula = speed ~ dist, data = cars)
## 
## Coefficients:
## (Intercept)         dist  
##      8.2839       0.1656
summary(lm.fit)
## 
## Call:
## lm(formula = speed ~ dist, data = cars)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -7.5293 -2.1550  0.3615  2.4377  6.4179 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  8.28391    0.87438   9.474 1.44e-12 ***
## dist         0.16557    0.01749   9.464 1.49e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.156 on 48 degrees of freedom
## Multiple R-squared:  0.6511, Adjusted R-squared:  0.6438 
## F-statistic: 89.57 on 1 and 48 DF,  p-value: 1.49e-12
plot(speed~dist,data = cars);abline(8.3,0.2,col="blue")

Actividad 2:

Se puede intentar predecir a partir del modelo lineal los valores con la función predict.lm

predict.lm(lm.fit,data.frame(dist=40))
##        1 
## 14.90661

También podemos predecir algunos puntos

datos<-c(20,40,60,80,100)

predict.lm(lm.fit,data.frame(dist=datos))
##        1        2        3        4        5 
## 11.59526 14.90661 18.21796 21.52931 24.84066

Utilizando los datos anteriores,

dist <- c(20,40,60,80,100)
speed <- c(11.59526,14.90661,18.21796,21.52931,24.84066)
new_data <- data.frame(speed=speed, dist=dist)
new_dataset <- rbind(cars,new_data)
new_dataset
##       speed dist
## 1   4.00000    2
## 2   4.00000   10
## 3   7.00000    4
## 4   7.00000   22
## 5   8.00000   16
## 6   9.00000   10
## 7  10.00000   18
## 8  10.00000   26
## 9  10.00000   34
## 10 11.00000   17
## 11 11.00000   28
## 12 12.00000   14
## 13 12.00000   20
## 14 12.00000   24
## 15 12.00000   28
## 16 13.00000   26
## 17 13.00000   34
## 18 13.00000   34
## 19 13.00000   46
## 20 14.00000   26
## 21 14.00000   36
## 22 14.00000   60
## 23 14.00000   80
## 24 15.00000   20
## 25 15.00000   26
## 26 15.00000   54
## 27 16.00000   32
## 28 16.00000   40
## 29 17.00000   32
## 30 17.00000   40
## 31 17.00000   50
## 32 18.00000   42
## 33 18.00000   56
## 34 18.00000   76
## 35 18.00000   84
## 36 19.00000   36
## 37 19.00000   46
## 38 19.00000   68
## 39 20.00000   32
## 40 20.00000   48
## 41 20.00000   52
## 42 20.00000   56
## 43 20.00000   64
## 44 22.00000   66
## 45 23.00000   54
## 46 24.00000   70
## 47 24.00000   92
## 48 24.00000   93
## 49 24.00000  120
## 50 25.00000   85
## 51 11.59526   20
## 52 14.90661   40
## 53 18.21796   60
## 54 21.52931   80
## 55 24.84066  100

Se calcula nuevamente la regresión lineal

lm.fit2 <- lm(speed~dist,data=new_dataset)
lm.fit2
## 
## Call:
## lm(formula = speed ~ dist, data = new_dataset)
## 
## Coefficients:
## (Intercept)         dist  
##      8.2839       0.1656
summary(lm.fit2)
## 
## Call:
## lm(formula = speed ~ dist, data = new_dataset)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -7.529 -1.933  0.000  2.415  6.418 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  8.28391    0.79773   10.38 2.21e-14 ***
## dist         0.16557    0.01544   10.73 6.84e-15 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.003 on 53 degrees of freedom
## Multiple R-squared:  0.6846, Adjusted R-squared:  0.6787 
## F-statistic: 115.1 on 1 and 53 DF,  p-value: 6.842e-15

Se obtuvieron coeficientes similares, donde los valores más alejados de los originales son mínimos.

Actividad 3

Ahora que sucedería si agregamos un dato externo, correspondiente a un dato real multiplicado por 100

conDatoExterno <- data.frame(speed = 15*100, dist = 26*100)
datasetConDato <- rbind(cars,conDatoExterno)
datasetConDato
##    speed dist
## 1      4    2
## 2      4   10
## 3      7    4
## 4      7   22
## 5      8   16
## 6      9   10
## 7     10   18
## 8     10   26
## 9     10   34
## 10    11   17
## 11    11   28
## 12    12   14
## 13    12   20
## 14    12   24
## 15    12   28
## 16    13   26
## 17    13   34
## 18    13   34
## 19    13   46
## 20    14   26
## 21    14   36
## 22    14   60
## 23    14   80
## 24    15   20
## 25    15   26
## 26    15   54
## 27    16   32
## 28    16   40
## 29    17   32
## 30    17   40
## 31    17   50
## 32    18   42
## 33    18   56
## 34    18   76
## 35    18   84
## 36    19   36
## 37    19   46
## 38    19   68
## 39    20   32
## 40    20   48
## 41    20   52
## 42    20   56
## 43    20   64
## 44    22   66
## 45    23   54
## 46    24   70
## 47    24   92
## 48    24   93
## 49    24  120
## 50    25   85
## 51  1500 2600

Con este dato que se encuentra bastante alejado a los datos ya existentes, calculamos la regresión lineal:

lm.fit3 <- lm(speed~dist,data=datasetConDato)
lm.fit3
## 
## Call:
## lm(formula = speed ~ dist, data = datasetConDato)
## 
## Coefficients:
## (Intercept)         dist  
##     -9.3589       0.5785
summary(lm.fit3)
## 
## Call:
## lm(formula = speed ~ dist, data = datasetConDato)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -36.06  -5.93   2.69   7.71  14.04 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -9.358904   1.609064  -5.816 4.48e-07 ***
## dist         0.578502   0.004379 132.098  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 11.12 on 49 degrees of freedom
## Multiple R-squared:  0.9972, Adjusted R-squared:  0.9971 
## F-statistic: 1.745e+04 on 1 and 49 DF,  p-value: < 2.2e-16