1.- Cree su propio ejemplo de regresión lineal simple utilizando un conjunto de datos con dos variables y la función lm. Grafique utilizando las funciones plot y abline.

Utilizando un archivo de texto data.csv que contiene información sobre el tiempo de duración de las sesiones de hemodiálisis (meses) y número de quistes en pacientes hospitalarios. ¿Existe alguna relación entre el tiempo y el número de quistes?

library("ggplot2")
datos = read.csv2(file = "data.csv")

tiempo = as.numeric(datos$Tiempo)
quistes = as.numeric(datos$Quistes)
mod = lm(quistes ~ tiempo, datos)
plot(tiempo, quistes)
title("Número de quistes y tiempo en hemodiálisis")
abline(mod)

Por lo tanto, el modelo que se ajusta a los datos es:

\[ y = mx + c \] \[ y = 1024*10^{-5}m + 4155*10^{-5}\]

Podemos obtener mas informacion del modelo construido:

summary(mod)
## 
## Call:
## lm(formula = quistes ~ tiempo, data = datos)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -25.8814  -3.4532   0.0344   2.6901  25.9934 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.41550    1.67406   0.248    0.805    
## tiempo       0.10244    0.01323   7.742 7.11e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.026 on 46 degrees of freedom
## Multiple R-squared:  0.5658, Adjusted R-squared:  0.5564 
## F-statistic: 59.95 on 1 and 46 DF,  p-value: 7.107e-10

Uno de los datos importantes es el coeficiente de determinación

print(summary(mod)$r.squared)
## [1] 0.5658145

Si observamos los p-values, solo el del intercepto es mayor a 0,05. Entonces:

Considerando lo anterior, el modelo se puede reducir a:

\[ y = 1024*10^{-5}m + 0\] Finalmente, podemos generar una zona de confianza para ver que puntos estan representados por el modelo generado

confianza = confint(mod, level = 0.95)
print(confianza)
##                  2.5 %    97.5 %
## (Intercept) -2.9541954 3.7852028
## tiempo       0.0758044 0.1290673
grafico = ggplot(datos,aes(x=tiempo, y=quistes, label= "")) +
  geom_point(aes(tiempo,quistes),datos,color = "green")+
  theme_bw() + ylab("Numero de quistes")+
  xlab("Tiempo en hemodiálisis en meses") + ggtitle("Número de quistes y tiempo en hemodiálisis") +
  theme(plot.title = element_text(hjust = 0.5)) +
  geom_text(check_overlap = TRUE) +
  geom_line(aes(tiempo,quistes),datos,color="blue",cex=0.1) +
  geom_smooth(method ="lm", formula = y ~ x,level=0.95)
plot(grafico)

De lo anterior, podemos concluir que utilizando un nivel de confianza del 95% si existe una relación entre tiempo y el número de quistes. Si es directa o no va a depender bien del tiempo, ya que puede variar en algunos casos, pero generalmente tiende a ser directa. Sin embargo, el modelo propuesto no es el adecuado para todos los puntos de datos ya que el coeficiente de determinación no se acerca a 0,99, e incluso con zonas de confianza se puede observar que varios puntos quedan fuera de estas zonas.

2.- Utilice el modelo de regresión lineal simple de la actividad 1 para predecir 5 nuevos registros e incorpórelos a su conjunto de datos. Calcule nuevamente la regresión lineal simple ¿Se observa algún cambio en los coeficientes?

df = data.frame(tiempo,quistes)
tiempo = c(4,5,8,9,10)
predict.lm(mod, data.frame(tiempo = tiempo))
##         1         2         3         4         5 
## 0.8252472 0.9276830 1.2349906 1.3374264 1.4398623
quistes = c(0.8252472,0.9276830,1.2349906,1.3374264,1.4398623)
df2 = data.frame(tiempo = tiempo, quistes = quistes)
df3 = rbind(df,df2)

tiempo = df3$tiempo
quistes = df3$quistes

Ahora, volvemos a realizar toda la regresión lineal simple:

mod = lm(quistes ~ tiempo, df3)
plot(tiempo, quistes)
title("Número de quistes y tiempo en hemodiálisis")
abline(mod)

Por lo tanto, el modelo que se ajusta a los datos es:

\[ y = 1047*10^{-5}m + 3888*10^{-6}\]

Podemos obtener mas informacion del modelo construido:

summary(mod)
## 
## Call:
## lm(formula = quistes ~ tiempo, data = df3)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -25.881  -3.033   0.000   2.565  25.993 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.41550    1.41711   0.293    0.771    
## tiempo       0.10244    0.01177   8.706 1.17e-11 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6.673 on 51 degrees of freedom
## Multiple R-squared:  0.5978, Adjusted R-squared:  0.5899 
## F-statistic: 75.79 on 1 and 51 DF,  p-value: 1.166e-11

Uno de los datos importantes es el coeficiente de determinación

print(summary(mod)$r.squared)
## [1] 0.5977625

Si observamos los p-values, solo el del intercepto es mayor a 0,05. Por lo tanto:

Considerando lo anterior, el modelo se puede reducir a:

\[ y = 1047*10^{-5}m + 0\] Finalmente, podemos generar una zona de confianza para ver que puntos estan representados por el modelo generado

confianza = confint(mod, level = 0.95)
print(confianza)
##                   2.5 %    97.5 %
## (Intercept) -2.42946338 3.2604708
## tiempo       0.07881381 0.1260579
grafico = ggplot(df3,aes(x=tiempo, y=quistes, label= "")) +
  geom_point(aes(tiempo,quistes),df3,color = "green")+
  theme_bw() + ylab("Numero de quistes")+
  xlab("Tiempo en hemodiálisis en meses") + ggtitle("Número de quistes y tiempo en hemodiálisis") +
  theme(plot.title = element_text(hjust = 0.5)) +
  geom_text(check_overlap = TRUE) +
  geom_line(aes(tiempo,quistes),df3,color="blue",cex=0.1) +
  geom_smooth(method ="lm", formula = y ~ x,level=0.95)
plot(grafico)

De lo anterior, podemos concluir que utilizando un nivel de confianza del 95% todavia existe una relación entre tiempo y el número de quistes. Si es directa o no va a depender bien del tiempo, ya que puede variar en algunos casos, pero generalmente tiende a ser directa. Sin embargo, el modelo propuesto sigue siendo un modelo no adecuado para todos los puntos de datos ya que el coeficiente de determinación no se acerca a 0,99, e incluso con zonas de confianza se puede observar que varios puntos quedan fuera de estas zonas.

3.- Tome un punto cualquiera de su conjunto de datos y multiplíquelo por 100, calcule nuevamente la regresión lineal simple ¿Se observa algún cambio en los coeficientes?

datos = read.csv2(file = "data.csv")
tiempo = as.numeric(datos$Tiempo)
quistes = as.numeric(datos$Quistes)

df = data.frame(tiempo, quistes)
df2 = data.frame(tiempo = 10*100, quistes = 0.8 * 100)
df = rbind(df, df2)
tiempo = df$tiempo
quistes = df$quistes

Ahora, volvemos a realizar toda la regresión lineal simple

mod = lm(quistes ~ tiempo, df)
plot(tiempo, quistes)
title("Número de quistes y tiempo en hemodiálisis")
abline(mod)

Por lo tanto, el modelo que se ajusta a los datos es:

\[ y = 2,18m + 0,084\]

Podemos obtener mas informacion del modelo construido:

summary(mod)
## 
## Call:
## lm(formula = quistes ~ tiempo, data = df)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -21.415  -3.819  -1.126   2.163  29.067 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 2.179529   1.311174   1.662    0.103    
## tiempo      0.083697   0.006902  12.127 4.45e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.154 on 47 degrees of freedom
## Multiple R-squared:  0.7578, Adjusted R-squared:  0.7527 
## F-statistic: 147.1 on 1 and 47 DF,  p-value: 4.453e-16

Uno de los datos importantes es el coeficiente de determinación

print(summary(mod)$r.squared)
## [1] 0.7578103

Si observamos los p-values, el del intercepto es mayor a 0,05, pero el de tiempo es muy bajo. Por lo tanto:

Considerando lo anterior, el modelo se puede reducir a:

\[ y = 2,18m + 0\]

Finalmente, podemos generar una zona de confianza para ver que puntos estan representados por el modelo generado

confianza = confint(mod, level = 0.95)
print(confianza)
##                   2.5 %     97.5 %
## (Intercept) -0.45821343 4.81727165
## tiempo       0.06981243 0.09758142
grafico = ggplot(df,aes(x=tiempo, y=quistes, label= "")) +
  geom_point(aes(tiempo,quistes),df,color = "green")+
  theme_bw() + ylab("Numero de quistes")+
  xlab("Tiempo en hemodiálisis en meses") + ggtitle("Número de quistes y tiempo en hemodiálisis") +
  theme(plot.title = element_text(hjust = 0.5)) +
  geom_text(check_overlap = TRUE) +
  geom_line(aes(tiempo,quistes),df,color="blue",cex=0.1) +
  geom_smooth(method ="lm", formula = y ~ x,level=0.95)
plot(grafico)

De lo anterior, se concluye que utilizando un nivel de confianza del 95% todavia existe una relación entre tiempo y el número de quistes. Si es directa o no va a depender bien del tiempo, ya que puede variar en algunos casos, sin embargo tiende a ser directa. No obstante el modelo propuesto sigue siendo un modelo no adecuado para todos los puntos de datos, ya que el coeficiente de determinación no se acerca a 0,99, e incluso con zonas de confianza se puede observar que varios puntos quedan fuera de estas zonas.

A pesar de que hubo un cambio en uno de los datos, los coeficientes no cambiaron. Probablemente, si hubiera habido un cambio en todos los datos, entonces ahí si se hubiera podido observar un cambio en los coeficientes