library(Hmisc)
library(readxl)
library(dplyr)
datos_vivienda <- read_excel("datos_vivienda.xlsx")

Punto 1

Exploratorio del Area construida

attach(datos_vivienda)
summary(Area_contruida)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    80.0    86.0    97.0   115.7   130.0   195.0
hist(Area_contruida, col = "#a0c39f",
      xlab = "Area construida (metros cuadrado)",
     ylab = "Frecuencia",
     main = "Histograma del area construida")

promedioArea <- mean(Area_contruida)
medianaArea <- median(Area_contruida)
desv_Est_Area <- sd(Area_contruida)

boxplot(Area_contruida, horizontal = TRUE,
        main = "Boxplot para Area", 
        col = "lightblue",
        pch = 19, notch = TRUE)
points(promedioArea, 
       1, 
       pch = 19, 
       col = c("red", "purple"))
legend("topright", 
       title = "Convención",
       legend = c("Promedio", "Error estandard"), 
       col = "red", 
       pch = c(19, NA),
       lty = c(NA, 1))
arrows(promedioArea -  desv_Est_Area / sqrt(nrow(datos_vivienda)), 1,
         promedioArea + desv_Est_Area / sqrt(nrow(datos_vivienda)), 1,
         angle = 90,
         length = 0.1, 
         code = 3,
         col = "red")

describe(Area_contruida)
## Area_contruida 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##       26        0       14    0.987    115.7    38.68     85.0     85.5 
##      .25      .50      .75      .90      .95 
##     86.0     97.0    130.0    170.0    178.2 
## 
## lowest :  80  85  86  87  89, highest: 130 134 170 181 195
##                                                                          
## Value       80.00  85.00  86.00  87.00  89.00  96.00  98.00 118.00 118.42
## Frequency       1      2      5      2      1      2      1      1      1
## Proportion  0.038  0.077  0.192  0.077  0.038  0.077  0.038  0.038  0.038
##                                              
## Value      130.00 134.00 170.00 181.00 195.00
## Frequency       4      1      3      1      1
## Proportion  0.154  0.038  0.115  0.038  0.038

Se puede observar que el promedio de Area en metros cuadrados es de 115.7 y la mediana 97.0 por lo tanto se puede concluir ademas de manera grafica con el histograma que los datos no tienen una distribucion simetrica.

Del histograma se puede ver que la mayoria de los datos estan acumulados entre 80 y 100 metros cuadrados, lo cual se confirma cuando en la tabla describe se observa que el dato mas frecuente es 85 metros cuadrados con 5 observaciones.

En el boxplot se puede apreciar que los datos no son simetricos debido a que la mediana no se muestra en el centro de la grafica, se muestra el promedio con el error estandar del mismo, ademas de mostrar los datos organizados por cuartiles mostrando asi que no existe ningun dato atipico.

Exploratorio de el Precio por millon

attach(datos_vivienda)
summary(precio_millon)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   240.0   251.2   305.0   332.1   395.0   480.0
hist(precio_millon, col = "orange",
     xlab = "Precio por millon (Pesos Colombianos)",
     ylab = "Frecuencia",
     main = "Histograma del precio por millon")

promedioPrecio <- mean(precio_millon)
medianaPrecio <- median(precio_millon)
desv_Est_Precio<- sd(precio_millon)

boxplot(precio_millon, horizontal = TRUE,
        main = "Boxplot para Precio", 
        col = "lightblue",
        pch = 19, notch = TRUE)
points(promedioPrecio, 
       1, 
       pch = 19, 
       col = c("red", "purple"))
legend("topright", 
       title = "Convención",
       legend = c("Promedio", "Error estandard"), 
       col = "red", 
       pch = c(19, NA),
       lty = c(NA, 1))
arrows(promedioPrecio -  desv_Est_Precio / sqrt(nrow(datos_vivienda)), 1,
         promedioPrecio + desv_Est_Precio / sqrt(nrow(datos_vivienda)), 1,
         angle = 90,
         length = 0.1, 
         code = 3,
         col = "red")

describe(precio_millon)
## precio_millon 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##       26        0       15    0.991    332.1    93.45    240.0    240.0 
##      .25      .50      .75      .90      .95 
##    251.2    305.0    395.0    440.0    450.0 
## 
## lowest : 240 250 255 260 268, highest: 410 419 430 450 480
##                                                                             
## Value        240   250   255   260   268   272   290   320   385   395   410
## Frequency      4     3     1     1     1     1     2     1     4     2     1
## Proportion 0.154 0.115 0.038 0.038 0.038 0.038 0.077 0.038 0.154 0.077 0.038
##                                   
## Value        419   430   450   480
## Frequency      1     1     2     1
## Proportion 0.038 0.038 0.077 0.038

Se puede observar que el promedio del Precio por millon es de 332.1 y la mediana 305.0 por lo tanto se puede concluir ademas de manera grafica con el histograma que los datos no tienen una distribucion simetrica.

Del histograma se puede ver que la mayoria de los datos estan acumulados entre 200 y 250 Millones de pesos, lo cual se confirma cuando en la tabla describe se observa que uno de los datos mas frecuente es 240 Millones de pesos con 4 observaciones acompañado en este rango con el segundo dato mas frecuente el cual es de 250 Millones de pesos con 3 observaciones .

En el boxplot se puede apreciar que los datos no son simetricos debido a que la mediana no se muestra en el centro de la grafica, se muestra el promedio con el error estandar del mismo, ademas de mostrar los datos organizados por cuartiles mostrando asi que no existe ningun dato atipico.

Punto 2

Veamos la correlación entre Area y precio. Se observa que a mayor cantidad de Area construida los precios aumenta y su relación es fuerte de acuerdo con el coeficiente de correlación de Pearson (0.9190295) el cual mide el nivel de dependencia de una variable respecto de otra variable independiente. Se puede observar graficamente que no se tiene una relacion lineal sino por el contrario una relacion de tipo logaritmica.

attach(datos_vivienda)
cor(Area_contruida,precio_millon) ##Coeficiente correlacion de Pearson
## [1] 0.9190295
scatter.smooth(Area_contruida,precio_millon,
     xlab = "Area construida (metros cuadrados)",
     ylab = "Precio por Millon (Millones de pesos)",
     main = "Relacion Area vs precio" )

Punto 3

Se observa que el coeficiente \(\beta_0\) no se debe interpretar por que no es logico que se vendan apartamentos con valores de de areas cero. Por otro lado el \(\beta_1=2.124\) nos indica que por cada metro cuadrado que se construye el precio por millon se incrementan en 2.124 Millones de pesos.

mod = lm(precio_millon~Area_contruida)
summary(mod)
## 
## Call:
## lm(formula = precio_millon ~ Area_contruida)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -51.673 -25.612  -6.085  24.875  67.650 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      86.234     22.479   3.836 0.000796 ***
## Area_contruida    2.124      0.186  11.422 3.45e-11 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 33.05 on 24 degrees of freedom
## Multiple R-squared:  0.8446, Adjusted R-squared:  0.8381 
## F-statistic: 130.5 on 1 and 24 DF,  p-value: 3.45e-11

Punto 4

Intervalo de confianza para \(\beta_1\)

## INTERVALO DE CONFIANZA B1
beta1_e=  2.124 ##b1 estimado      
error_beta1=  0.186 ## error de b1  
##95% lvl confianza
t=qt(0.975,df = 24) 

LI= beta1_e-(t*error_beta1) ##Limite inferior intervalo de confianza
LS = beta1_e+(t*error_beta1) ##Limite superior intervalo de confianza
c(LI,LS)
## [1] 1.740115 2.507885

El intervalo nos indica que por cada metro cuadrado que se construye el precio por millon se incrementara en un valor entre 1.740115 y 2.507885 millones de pesos con una significancia del 95%, note que el intervalo de confianza (1.740115 , 2.507885) no se encuentra el 0, por lo tanto \(\beta_1\not=0\) con una significancia del 95%

Prueba de hipotesis sobre \(\beta_1\) = 0

Prueba de hipotesis para \(\beta_1\) \(H_0\): \(\beta_1=0\) vs \(H_1\): \(\beta_1\not=0\)

t0=(beta1_e-0)/error_beta1
tc=qt(0.975,24) ## 95% significancia y n-2 datos
t0
## [1] 11.41935
tc
## [1] 2.063899

Se rechaza \(H_0\) puesto que \(|11.41935|\) es mayor que 2.063899 asi se concluye con una significancia del 95% que \(\beta_1\not=0\)

Es evidente por ambos metodos de confirmacion que \(\beta_1\not=0\) lo cual significa que este coeficiente si es significativo a la hora de explicar la variacion de los precios segun el modelo.

Punto 5

summary(mod)
## 
## Call:
## lm(formula = precio_millon ~ Area_contruida)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -51.673 -25.612  -6.085  24.875  67.650 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      86.234     22.479   3.836 0.000796 ***
## Area_contruida    2.124      0.186  11.422 3.45e-11 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 33.05 on 24 degrees of freedom
## Multiple R-squared:  0.8446, Adjusted R-squared:  0.8381 
## F-statistic: 130.5 on 1 and 24 DF,  p-value: 3.45e-11
R_squared = 0.8446

Interpretacion \(R^2\)

El coeficiente \(R^2=0.8446\) significa que el modelo explica el 84.46% de la variabilidad de los precios, por lo tanto el Area construida es una caracteristica que influye mucho sobre el precio. Sin embargo note que resta un porcentaje del 15.54% lo cual indicia que existen otras variables que tambien afectan al precio por millon.

Punto 6

Prediccion precio promedio apartamento de 110 metros cuadrados

attach(datos_vivienda)

predict(mod,list(Area_contruida=110),level = 0.95)
##        1 
## 319.8706
predict(mod,list(Area_contruida=110),interval = "confidence",level = 0.95)
##        fit      lwr      upr
## 1 319.8706 306.3133 333.4279

Segun la prediccion del modelo el precio promedio de un apartamento en la misma zona y con 110 metros cuadrados seria de 319.8706 millones de pesos, por lo tanto una oferta de 200 millones seria excelente teniendo solo en cuenta el Area construida puesto que esta mucho mas barato que el promedio de la zona, se deben tener en cuenta otras variables no incluidas en el modelo que tambien afecten significativamente a el precio como por ejemplo el estado de el apartamento. el piso en el que esta ubicado, los vecinos, ademas de si tienen ascensor. Entre otras.

Punto 7

par(mfrow=c(2,2))
plot(mod)

##Validacion media 0
ei=mod$residuals
round(mean(ei),0)
## [1] 0

Validacion varianza constante

En la grafica “Residuals vs Fitted” se puede observar como la varianza tiene una tendencia no constante ni lineal esto debido a que los datos tienen una variacion distinta respecto a su media por cada observacion, se recomienda transformacion \(\frac{1}{x_i}\) en el modelo para ajustarla.

Validacion normalidad

En la grafica “Normal Q-Q” se observa como los residuales tienen una tendencia normal pero tal tendencia llega a tener cierta desviacion considerable, se recomienda transfromacion \(\frac{1}{x_i}\) para mejorar la normalidad.

Independecia de los errores

Dado que estos registros no corresponden a datos en el tiempo no se tiene un orden temporal para realizar la validación de este supuesto. Se valida por definición del tipo de datos de corte transversal.

Punto 8

Transformacion \(X=\frac{1}{x_i}\)

attach(datos_vivienda)
x=Area_contruida
x1=1/x
mod_t=lm(precio_millon~x1)

Punto 9

##Validacion normalidad
ei_t=mod_t$residuals
round(mean(ei_t),3)
## [1] 0
par(mfrow=c(2,2))
plot(mod_t)

Validacion varianza constante

En la grafica “Residuals vs Fitted” del modelo transformado se puede observar como la varianza es mas aleatoria tiene una tendencia mas constante que el modelo pasado demostrado mediante la linea roja modelada, esto debido a la transformacion efectuada.

Validacion normalidad

En la grafica “Normal Q-Q” se observa como los residuales tienen una tendencia mucho mas ajustada a la linea de normalidad del qqplot que en el modelo pasado. llevando asi a una mejor validacion del supuesto de normalidad.

summary(mod_t)
## 
## Call:
## lm(formula = precio_millon ~ x1)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -36.987 -16.743  -5.023  18.547  44.379 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    635.35      18.27   34.77  < 2e-16 ***
## x1          -32464.72    1895.32  -17.13 5.84e-15 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 23.05 on 24 degrees of freedom
## Multiple R-squared:  0.9244, Adjusted R-squared:  0.9212 
## F-statistic: 293.4 on 1 and 24 DF,  p-value: 5.839e-15

Comparacion del ajuste del modelo

Usando el coeficinete \(R^2=0.9244\) como indicador del ajuste del modelo donde este significa que tan cerca están los datos de la línea de regresión ajustada.Y sabiendo que en general, cuanto mayor es el \(R^2\), mejor se ajusta el modelo a los datos. Se puede concluir gracias a que el coeficiente en el primer modelo es \(R^2=0.8446\) que se cumplio el objetivo de aumentar la medida de ajuste del modelo,sin incluir variables predictoras adicionales.

Punto 10

Funcion que permite ingresar el valor de X,Y,(1−α)% en una regresión lineal simple y retorna el intervalo de confianza para \(\beta_1\) dado un nivel de confianza de entrada (1−α)%

x =variable independiente, y = variable dependiente, z = porcentaje de significancia (ej: 95,99,97 etc)

func=function(x,y,z){
  numdata=data.frame(x)##Vuleve accesible el numero de datos
  mod1=lm(y~x)## Desarrolla el modelo lineal 
  resmod=summary(mod1)## almacena las respuestas del modelo
  coeficientes=data.frame(resmod$coefficients)## vuelve accesible los coeficietes del modelo
  beta1_e1=coeficientes[2,1]## accede a b1 estimado
  error1_beta1=coeficientes[2,2]## accede a el error de b1
  t1=qt(1-((-z/100)+1)/2,nrow(numdata)-2)## calcula el valor de t con una significanica de (1-alpha)% y n-2 datos 
  
  LI1=beta1_e1-(t1*error1_beta1)## Limite inferior intervalo de confianza para b1
  LS1=beta1_e1+(t1*error1_beta1)## limite superior intervalo de confianza para b1
  w=c(LI1,LS1)## intervalo de confianza para b1 
  
  
  return(w)
 
}
func(x=datos_vivienda$Area_contruida,y=datos_vivienda$precio_millon,z=95)
## [1] 1.740170 2.507771