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.
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
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.
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:
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
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)
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
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
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()
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)