Rpubs https://rpubs.com/sgcifuentes/933307

  1. Predicción de los precios de las acciones. Analizar el comportamiento de los precios de las Acciones de Ecopetrol según la variación del precio del barril de petróleo WTI producido en Colombia. Se tienen los siguientes precios
  1. Proponga un modelo de regresión lineal simple que permita predecir el valor de las Acciones de Ecopetrol con base en el Precio del barril de petróleo en Colombia. Indique la ecuación de regresión y el valor del R2.
require(ggplot2)
require(plotly)

prec_ecop=c(1090, 1170, 1160, 1230, 1155, 1165, 1205, 1170, 1150, 1130, 1110, 1105, 
1085, 1060, 1035, 1015, 955, 961) 

prec_petr=c(35.62,36.31,37.35,34.95,34.53,35.81,36.14,37.50,37.80,36.81,37.87,37.04,
36.76,35.97,33.97,33.27,31.41,30.44)

bd=data.frame(prec_ecop,prec_petr)

#Realizamos analisis exploratorio bivariado -(Relación entre precio acciones ecopetrol contra precio del petroleo WTI)

Graf_tendencia_accion_Ecopetrol = ggplot(data = bd, mapping = aes(x=prec_petr, y=prec_ecop)) + geom_point()+theme_bw()+geom_smooth()
ggplotly(Graf_tendencia_accion_Ecopetrol)
cor(bd$prec_petr,bd$prec_ecop)
## [1] 0.7074373

Se observa que la relación entre el precio del petroleo WTI y el precio de las acciones de Ecopetrol es fuerte; Se evidencia en el coeficiente de correlación de 0.7, es decir, que el incremento del WTI tiene influencia directa en el precio de la acción de ecopetrol.

ESTIMACIÓN DE MODELO DE REGRESIÓN LINEAL SIMPLE

modelo_ecopetrol=lm(prec_ecop ~ prec_petr,data=bd)
modelo_ecopetrol
## 
## Call:
## lm(formula = prec_ecop ~ prec_petr, data = bd)
## 
## Coefficients:
## (Intercept)    prec_petr  
##      177.77        26.19

El modelo estimado es: Precio_Acción_Ecopetrol = 177.77 + (26.19 * precio_petroleo_WTI), donde Bo=177.77 y B1=26.19. De esto se puede interpretar que si el precio de la acción de ecopetrol no dependiera un 70% del precio del petroleo WTI, tendría un costo de 177.77 pesos, sin embargo, este precio de la acción varía 26.19 veces lo que cueste el precio del petroleo WTI.

# Realizamos el Summary del modelo

summary(modelo_ecopetrol)
## 
## Call:
## lm(formula = prec_ecop ~ prec_petr, data = bd)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -59.90 -40.74 -15.94  33.40 136.82 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)   
## (Intercept)  177.768    232.828   0.764  0.45627   
## prec_petr     26.192      6.542   4.004  0.00102 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 57.13 on 16 degrees of freedom
## Multiple R-squared:  0.5005, Adjusted R-squared:  0.4692 
## F-statistic: 16.03 on 1 and 16 DF,  p-value: 0.001024

Se observa en la tabla Summary del modelo que el precio del petroleo WTI es significativo en el modelo porque el valor p lo indica con un nivel de confianza del 99.8% y además el modelo logra explicar el 50% de la variablidad del precio de la acción de Ecopetrol con el R2 de 0.5005

b.Pruebe la significancia del modelo propuesto en “a)” plantee las hipótesis respectivas y use el concepto de Valor _p para tomar la decisión sobre las hipótesis. Use α = 0.05

Las Hipotesis se expresarian de la siguiente manera: Hipotesis nula (Ho): B1 = 0 (no hay relación) Hipotesis alterna (H1): B1 ≠ 0 (Si hay relación)

Dado que se tiene un p-value: 0.001024 en el modelo y este es inferior a 0.05, se rechaza la hipotesis nula y se concluye lo siguiente: Si existe una relación significativa entre la variable dependiente que es el precio de la acción del petroleo y la variable independiente que es el precio del petroleo WTI.

  1. El modelo estimado es: Precio_Acción_Ecopetrol = 177.77 + (26.19 * precio_petroleo_WTI), donde Bo=177.77 y B1=26.19. De esto se puede interpretar que si el precio de la acción de ecopetrol no dependiera un 70% del precio del petroleo WTI, tendría un costo de 177.77 pesos, sin embargo, este precio de la acción varía 26.19 veces lo que cueste el precio del petroleo WTI.

Se observa en la tabla Summary del modelo que el precio del petroleo WTI es significativo en el modelo porque el valor p lo indica con un nivel de confianza del 99.8% y además el modelo logra explicar el 50% de la variablidad del precio de la acción de Ecopetrol con el R2 de 0.5005

  1. Análsis de residuos

Se puede observar en la gráfica de normalidad de los residuos que estos están bien aproximados a la recta, es decir, hay una mínima cantidad de error en el modelo y los residuos se consideran que tienen normalidad.

residuos = residuals(modelo_ecopetrol)
plot(prec_petr,residuos);abline(h=0)

qqnorm(residuos);qqline(residuos)

res=modelo_ecopetrol$residuals

mean(res)
## [1] -5.527407e-15
t.test(res)
## 
##  One Sample t-test
## 
## data:  res
## t = -4.2309e-16, df = 17, p-value = 1
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  -27.56364  27.56364
## sample estimates:
##     mean of x 
## -5.527407e-15
shapiro.test(res)
## 
##  Shapiro-Wilk normality test
## 
## data:  res
## W = 0.89259, p-value = 0.04276
lmtest::gqtest(modelo_ecopetrol)
## 
##  Goldfeld-Quandt test
## 
## data:  modelo_ecopetrol
## GQ = 0.17924, df1 = 7, df2 = 7, p-value = 0.9813
## alternative hypothesis: variance increases from segment 1 to 2
lmtest::dwtest(modelo_ecopetrol)
## 
##  Durbin-Watson test
## 
## data:  modelo_ecopetrol
## DW = 0.74504, p-value = 0.0004666
## alternative hypothesis: true autocorrelation is greater than 0

En el test Simple se valida que el valor p es 1, es decir, Ok En el test de Shapiro el valor p da 0.04, es decir, correcto se rechaza la hipotesis nula. En el test Goldfeld el valor de p es de 0.98 es decir que las varianzas se asumen iguales. En el test de Durbin Watson el valor de p es 0.00046, es decir que no hay independencia en los errores.

Se validan todos los supuestos y se concluye que todos estos se cumplen y de esta forma el modelo está listo para cualquier uso de inferencias estadísticas.

  1. El modelo estimado es valido y cumple con todas las condiciones para ser usado de acuerdo a lo siguiente: Precio_Acción_Ecopetrol = 177.77 + (26.19 * precio_petroleo_WTI), donde Bo=177.77 y B1=26.19. De esto se puede interpretar que si el precio de la acción de ecopetrol no dependiera un 70% del precio del petroleo WTI, tendría un costo de 177.77 pesos, sin embargo, este precio de la acción varía 26.19 veces lo que cueste el precio del petroleo WTI.
  1. Los siguientes datos corresponden a la INFLACION y al SALARIO MINIMO LEGAL MENSUAL (SMLM) desde el año 1999 para Colombia.

La idea es establecer un modelo de regresión que ayude a determinar el comportamiento de estas dos variables tomando como variable dependiente SALARIO MINIMO LEGAL MENSUAL (SMLM) y como variable independiente INFLACION obtenga un modelo de regresión lineal simple y resuelva:

  1. Escriba la ecuación del modelo de regresión lineal simple
infl=c(9.23, 8.75, 7.65, 6.99, 6.49, 5.50, 4.85, 4.48, 5.69, 7.67, 2.00, 3.17, 
3.73, 2.44,  1.94, 3.66, 6.77)  
  
smlm=c(236460, 260100, 286000, 309000, 332000, 358000, 381500, 408000, 433700, 
461500, 496900, 515000, 535600, 566700, 589500, 616027, 644350)

bdSML=data.frame(infl,smlm)
head(bdSML)
##   infl   smlm
## 1 9.23 236460
## 2 8.75 260100
## 3 7.65 286000
## 4 6.99 309000
## 5 6.49 332000
## 6 5.50 358000
cor(bdSML$infl,bdSML$smlm)
## [1] -0.7086581
modelo_salario_minimo=lm(smlm ~ infl,data=bdSML)
modelo_salario_minimo
## 
## Call:
## lm(formula = smlm ~ infl, data = bdSML)
## 
## Coefficients:
## (Intercept)         infl  
##      648486       -39489
summary(modelo_salario_minimo)
## 
## Call:
## lm(formula = smlm ~ infl, data = bdSML)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -75463 -63456 -42854  17623 263207 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   648486      58947   11.00  1.4e-08 ***
## infl          -39489      10151   -3.89  0.00145 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 94130 on 15 degrees of freedom
## Multiple R-squared:  0.5022, Adjusted R-squared:  0.469 
## F-statistic: 15.13 on 1 and 15 DF,  p-value: 0.00145

Salario Minimo = 648.486 + (-39489 * inflacion), donde Bo=648.486 y B1= -39489

Esto indica que si no hubiera inflación el salario minimo sería 648.486 y que por cada punto de aumento en inflación el salario minimo disminuye 39.489

  1. Las Hipotesis se expresarian de la siguiente manera: Hipotesis nula (Ho): B1 = 0 (no hay relación) Hipotesis alterna (H1): B1 ≠ 0 (Si hay relación)

  2. Se observa que la relación entre la inflación y el salario minimo es fuerte pero a la inversa; El coeficiente de correlación es -0.7, esto indica hay una relación inversa directa entre ambas variables y que por cada punto de aumento en inflación el salario minimo disminuye 39.489

  3. El modelo estimado es Salario Minimo = 648.486 + (-39489 * inflacion), donde Bo=648.486 y B1= -39489. De esto se puede interpretar que si ho existiera una relación del 50% entre ambas variables, el salario minimo no se vería afectado por la inflación, pero tenemos un valor que nos confirma dicha hipotesis que es el valor p.

Se observa en la tabla Summary del modelo que la inflación es significativo en el modelo porque el valor p lo indica con un nivel de confianza del 99.8% y además el modelo logra explicar el 50% de la variablidad del salario minimo con el R2 de 0.5022.

residuos_SML = residuals(modelo_salario_minimo)
plot(infl,residuos_SML);abline(h=0)

qqnorm(residuos_SML);qqline(residuos_SML)

res_SML=modelo_salario_minimo$residuals

mean(res_SML)
## [1] -1.491304e-12
t.test(res_SML)
## 
##  One Sample t-test
## 
## data:  res_SML
## t = -6.7462e-17, df = 16, p-value = 1
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  -46862.45  46862.45
## sample estimates:
##     mean of x 
## -1.491304e-12
shapiro.test(res_SML)
## 
##  Shapiro-Wilk normality test
## 
## data:  res_SML
## W = 0.78826, p-value = 0.001407
lmtest::gqtest(modelo_salario_minimo)
## 
##  Goldfeld-Quandt test
## 
## data:  modelo_salario_minimo
## GQ = 140.68, df1 = 7, df2 = 6, p-value = 3.171e-06
## alternative hypothesis: variance increases from segment 1 to 2
lmtest::dwtest(modelo_salario_minimo)
## 
##  Durbin-Watson test
## 
## data:  modelo_salario_minimo
## DW = 0.68432, p-value = 0.0002714
## alternative hypothesis: true autocorrelation is greater than 0

En el test Simple se valida que el valor p es 1, es decir, Ok En el test de Shapiro el valor p da 0.001, es decir, correcto se rechaza la hipotesis nula. En el test Goldfeld el valor de p es de 3.171e-06 es decir que las varianzas no son iguales, sin embargo no afecta el modelo. En el test de Durbin Watson el valor de p es 0.00027, es decir que no hay independencia en los errores.

Se validan todos los supuestos y se concluye que todos estos se cumplen y de esta forma el modelo está listo para cualquier uso de inferencias estadísticas.

predict (modelo_salario_minimo,list(infl=8.75),interval = "confidence",level =0.95)
##        fit    lwr      upr
## 1 302954.3 214813 391095.6
  1. El modelo es conveniente y validando la data aleatoriamente se observa que los datos están dentro del rango predecido.
  1. Con base en los datos de precios de vivienda de la actividad en clase realizar un informe que contenga los siguientes puntos utilizando R y RMarkdown .
  1. Realice un filtro a la base de datos e incluya solo las ofertas de apartamentos, de la zona norte de la ciudad con precios inferiores a los 500 millones de pesos y áreas menores a 300 mt2. Presente los primeros 3 registros de la base y algunas tablas que comprueben la consulta. (Adicional un mapa con los puntos de la base, discutir si todos los puntos se ubican en la zona norte o se presentan valores en otras zonas, por que?).

A continuación podemos observar la base de datos filtrada por apartamentos de la zona norte de la ciudad con precios inferiores a los 500 millones de pesos y áreas menores a 300 mt2 y al graficar estos lugares nos encontramos que no todos los puntos se concentran en la zona norte y esto se debe a que la longitud y latitud está errada, es decir, el vendedor puso mal la dirección en la plataforma.

library(readxl)
datos = read_excel("C:/Users/User/Downloads/Datos_Vivienda (1).xlsx")

#View(datos)
ID=1:dim(datos)[1]

datos_Id=data.frame(ID,datos)

#View(datos_Id)

require(dplyr)
## Loading required package: dplyr
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
db_filtrada2 = datos_Id %>% filter(Tipo == "Apartamento" & Zona =="Zona Norte" & precio_millon < "500" & Area_contruida < "300")

#View(db_filtrada)

db_filtrada2[1:3,]
##    ID       Zona piso Estrato precio_millon Area_contruida parqueaderos Banos
## 1  89 Zona Norte   NA       5           340            106            2     2
## 2 104 Zona Norte    1       3           135            103            1     3
## 3 183 Zona Norte   NA       5           390            102            2     3
##   Habitaciones        Tipo                 Barrio cordenada_longitud
## 1            3 Apartamento               la flora          -76.48200
## 2            4 Apartamento          calimio norte          -76.48347
## 3            3 Apartamento urbanizaciv=n la flora          -76.48800
##   Cordenada_latitud
## 1           3.43500
## 2           3.48626
## 3           3.46400
require(leaflet)
## Loading required package: leaflet
## Warning: package 'leaflet' was built under R version 4.1.3
leaflet() %>% addCircleMarkers(lng = db_filtrada2$cordenada_longitud,lat = db_filtrada2$Cordenada_latitud,radius = 0.3,color = "black") %>% addTiles()
  1. Realice un análisis exploratorio de datos enfocado en la correlación entre la variable respuesta (precio del apartamento) en función del área construida, estrato y si tiene parqueadero. Use gráficos interactivos con plotly e interprete los resultados.
precio_promedio=mean(db_filtrada2$precio_millon,na.rm = TRUE)
mediana_precio=median(db_filtrada2$precio_millon,na.rm = TRUE)
promedio_area=mean(db_filtrada2$Area_contruida,na.rm = TRUE)
cantidad_ofertas=length(db_filtrada2$Area_contruida)

Resultado = data.frame(precio_promedio, mediana_precio, promedio_area, cantidad_ofertas)
Resultado
##   precio_promedio mediana_precio promedio_area cantidad_ofertas
## 1        370.5778            350      131.8952              315
require(ggplot2)
require(plotly)
attach(db_filtrada2)
## The following object is masked _by_ .GlobalEnv:
## 
##     ID
Graf_area_construida = ggplot(data = db_filtrada2, mapping = aes(x=Area_contruida, y=precio_millon)) + geom_point()+theme_bw()+geom_smooth()

ggplotly(Graf_area_construida)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
cor(db_filtrada2$Area_contruida,db_filtrada2$precio_millon)
## [1] 0.4764374

Se observa que la relación entre el área construida y el precio de los apartamentos es media; Se evidencia en el coeficiente de correlación de 0.47, es decir, el precio de la vivienda si tiene influencia directa en el precio de la vivienda.

Graf_estrato = ggplot(data = db_filtrada2, mapping = aes(x=Estrato, y=precio_millon)) + geom_point()+theme_bw()+geom_smooth()

ggplotly(Graf_estrato)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : pseudoinverse used at 2.985
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : neighborhood radius 2.015
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : reciprocal condition number 4.9425e-016
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric =
## parametric, : There are other near singularities as well. 1.0302
## Warning in predLoess(object$y, object$x, newx = if
## (is.null(newdata)) object$x else if (is.data.frame(newdata))
## as.matrix(model.frame(delete.response(terms(object)), : pseudoinverse used at
## 2.985
## Warning in predLoess(object$y, object$x, newx = if
## (is.null(newdata)) object$x else if (is.data.frame(newdata))
## as.matrix(model.frame(delete.response(terms(object)), : neighborhood radius
## 2.015
## Warning in predLoess(object$y, object$x, newx = if
## (is.null(newdata)) object$x else if (is.data.frame(newdata))
## as.matrix(model.frame(delete.response(terms(object)), : reciprocal condition
## number 4.9425e-016
## Warning in predLoess(object$y, object$x, newx = if
## (is.null(newdata)) object$x else if (is.data.frame(newdata))
## as.matrix(model.frame(delete.response(terms(object)), : There are other near
## singularities as well. 1.0302
cor(db_filtrada2$Estrato,db_filtrada2$precio_millon)
## [1] 0.4657815
db_filtrada2$parqueaderos = as.numeric(db_filtrada2$parqueaderos)
## Warning: NAs introducidos por coerción
db_filtrada2$parqueaderos[is.na(db_filtrada2$parqueaderos)] = 0

View(db_filtrada2)


#class(parqueaderos)
#parqueaderos_2=as.numeric(parqueaderos)
#class(parqueaderos_2)
#db_filtrada$parqueaderos_2 = ifelse(is.na(db_filtrada),
#                                    "0",db_filtrada$parqueaderos)

#db_filtrada$parqueaderos = as.factor(db_filtrada$parqueaderos)

#pairs(db_filtrada)

#plot(x = db_filtrada[,4:7])

#View(db_filtrada)


#Graf_parqueadero = ggplot(data = db_filtrada, mapping = aes(x=parqueaderos_2, y=precio_millon)) + geom_point()+theme_bw()+geom_smooth()

#ggplotly(Graf_parqueadero)

#cor(db_filtrada$parqueaderos_2,db_filtrada$precio_millon)
#modelo_vivienda=lm(precio_millon ~ Area_contruida + Estrato + parqueaderos)
#modelo_vivienda

#summary(modelo_salario_minimo)