#Control 3

###P1

#Cargue todos los paquetes que necesitará para realizar el control. (1 punto)

rm(list=ls())
library(data.table)
library(caret)
library(ggplot2)
library(rpart)
library(rpart.plot)
library(tidyverse)
library(reshape2)
library(factoextra) #Crear clusters
library(dbscan) #Hacer DBScan

###P2

#Cargue su base de datos (3 puntos)

toctoc<-fread("testdatosTocToc.csv")

###P3

#Resuma su trabajo. Mencione que es lo que quieren solucionar/responder, el/los métodos empleados y las bases de datos utilizadas.(Máximo 100 palabras) (6 puntos)

#Nuestro trabajo consiste en un modelo que predice como varia el precio de un bien inmueble en base a variables relevantes tales como; superficie, plusvalía y comuna. Para así poder generar un análisis de compatibilidad, este consiste en localizar el inmueble o terreno que mejor se ajuste a las necesidades de un proyecto específico, para poder optar al mejor precio, en contraste con otras propiedades de iguales características y de manera expedita.

###P4

#Muestre el tipo de cada una de las variables de su base de datos “principal”. Pista : Para ahorrar tiempo, pueden utilizar la función sapply que les permitirá aplicar la función a cada variable de la base de datos de una vez.(4 puntos)

sapply(toctoc,class)

###P5

##¿Cuáles son las 4 variables más importantes de sus datos y por qué? Esto en relación a la importancia para responder/resolver lo propuesto en su trabajo y no la codificación (3 puntos)

#Las 4 variables más importantes para realizar las predicciones son; precio, superficie (m²), plusvalía y comuna. Debido a que las últimas 3 variables están correlacionadas con la variable precio, la cual buscamos predecir con exactitud. Básicamente la comuna en la cual se ubica el inmueble afecta directamente en su precio, también en el incremento del valor de esta a través del tiempo y ciertamente el precio está influido por la superficie con la que cuenta la propiedad. Dado que el precio de los inmuebles se fija respecto a estas variables, las cuales son de mayor relevancia que la cantidad de habitaciones o baños, las que resultarían más redundantes a la hora de determinar el precio de los inmuebles.

###P5

#Realice dos visualizaciones que reflejen las problemáticas de su trabajo y las posibles soluciones. Pista: Una buena visualización en este sentido, es aquella que no necesita información adicional para poder ser entendida a la luz de su trabajo (10 puntos)

data("toctoc")
head(toctoc)
args(qplot)
#Grafico que compare en el que se compara la comuna en que se encuentra el inmueble con su respectivo precio.
qplot(precio,comuna,data=toctoc)

#Grafico en el que se compara lasuperficie del inmueble con su respectivo precio.
qplot(superficie,precio,data=toctoc,geom="line")

###P6

#Realice un modelo de regresión lineal para predecir una variable, debe incluir más de 2 variables. Además, incluya algún método de validación cruzada y evalúe su modelo. En caso de no poder realizarse, argumente a la luz de los conceptos y aplicaciones que se han realizado en el curso, el por qué no se pudo realizar (10 puntos)

toctoc$superficie <- as.numeric(gsub(",", ".", toctoc$superficie))
toctoc$precio <- as.numeric(gsub("UF", "",  toctoc$precio))
toctoc$crecplusv <- as.numeric(gsub("%", "",  toctoc$crecplusv))
toctoc$crecplusv <- toctoc$crecplusv/100
toctoc$dorm <- as.numeric(toctoc$dorm)
toctoc$bath <- as.numeric(toctoc$bath)

toctoc <- toctoc[!is.na(toctoc$superficie),]
toctoc <- toctoc[!is.na(toctoc$crecplusv),]

regresion <- lm(data=toctoc,formula = precio ~ superficie + dorm+ crecplusv)
summary(regresion)

set.seed(12345)
configcruzada<- trainControl(method = "cv", number = 5)
vcruzada1<- train(precio ~ superficie + dorm+ crecplusv, data = toctoc, method="lm",trControl=configcruzada)

print(vcruzada1)

###P7

#Realice un modelo de arboles de decisión para predecir una variable, debe incluir más de 2 variables. Además, incluya algún método de validación cruzada y evalúe su modelo. En caso de no poder realizarse, argumente a la luz de los conceptos y aplicaciones que se han realizado en el curso, el por qué no se pudo realizar (10 puntos)

com<-colsplit(string=toctoc[,addr], pattern=",", names=c("Part1", "comuna","parte3"))
toctoc[,comuna:=com$comuna]

arbol <- rpart(comuna~dorm + precio, data = toctoc, method = "class")
rpart.plot(arbol)

particion <- createDataPartition(toctoc[,comuna],times = 1, p = 0.8, list = F)
train <- toctoc[particion,]
test <- toctoc[-particion,]

arbol<-rpart(comuna~precio+ superficie + crecplusv + dorm,data=train,method="class")
rpart.plot(arbol)

prediccion<-predict(arbol,newdata = test,type = "class")

#matriz conficion
matcon<-table(test$comuna,prediccion)
matcon

#precision
precision<-sum(diag(matcon))/sum(matcon)
precision

#Efectivamente, presentamos un modelo deficiente en terminos de la calidad de las predicciones. Creemos que esto puede deberse a las complicaciones que tuvimos con la base de datos donde, entre organizarla y editarla, se presentan datos mal escritos que afectan a los resultados.

###P8

#Realice un análisis de cluster sencillo con algunas variables de su base de datos. Debe argumentar la elección del método utilizado (k-means o DBSCAN). En caso de no poder realizarse, argumente a la luz de los conceptos y aplicaciones que se han realizado en el curso, el por qué no se pudo realizar (10 puntos)

Data1<- toctoc[,.(precio,crecplusv)]

ggplot(data= toctoc, aes(x = precio, y = crecplusv, color= superficie )) + geom_point(aes(size = superficie))


set.seed(2)

k1<-kmeans(x = Data1, centers = 3, nstart = 20)
clusteres.km <- k1$cluster
fviz_cluster(k1,data=Data1,geom = "point")

#Para lograr avanzar con los clusters, determinamos que, al tener una muestra con alta varianza,  k.means podria ser más util. Esto se debe a que se desea agrupar, segun precios, a los datos de nuestra muestra. Por ende, DBSCAN no nos serviría debido a que hay que elegir ciertos puntos como referencias pero, en nuestro caso, no se requiere poseer semejante referencia sino evidenciar la separación.