rm(list=ls())
library(data.table)
library(ggplot2)
library(caret)
## Loading required package: lattice
library(jtools)
library(scales)
library(rpart.plot)
## Loading required package: rpart
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(dbscan)
general<- data.table(fread("CC GENERAL.csv", encoding = "Latin-1"))
diabetes<-data.table(fread("diabetes.csv", encoding = "Latin-1"))
paris<-data.table(fread("ParisHousing.csv", encoding = "Latin-1"))
class(general)
## [1] "data.table" "data.frame"
class(diabetes)
## [1] "data.table" "data.frame"
class(paris)
## [1] "data.table" "data.frame"

Parte 1

P1

Realice dos modelos de regresión lineal multiple para predecir la variable price ¿Cuál predice mejor dentro de muestra?. Explique y calcule los criterios.

Modelo 1

f01 <- formula(price~squareMeters+floors+hasYard+numPrevOwners+hasGuestRoom )
reg_lm <- lm(f01,data=paris)
summary(reg_lm)
## 
## Call:
## lm(formula = f01, data = paris)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -7029.2 -1707.4  -162.9  1666.7  8318.5 
## 
## Coefficients:
##                 Estimate Std. Error    t value Pr(>|t|)    
## (Intercept)    2.205e+03  9.162e+01     24.070   <2e-16 ***
## squareMeters   1.000e+02  8.411e-04 118891.662   <2e-16 ***
## floors         5.431e+01  8.378e-01     64.827   <2e-16 ***
## hasYard        3.057e+03  4.840e+01     63.147   <2e-16 ***
## numPrevOwners -3.554e+00  8.472e+00     -0.420    0.675    
## hasGuestRoom  -5.064e+00  7.620e+00     -0.665    0.506    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2420 on 9994 degrees of freedom
## Multiple R-squared:      1,  Adjusted R-squared:      1 
## F-statistic: 2.828e+09 on 5 and 9994 DF,  p-value: < 2.2e-16
paris$s1<- fitted(reg_lm,paris,'probabilities')

Modelo 2

f02 <- formula(price~hasPool+cityCode+cityPartRange+basement )
reg_lm2 <- lm(f02,data=paris)
summary(reg_lm2)
## 
## Call:
## lm(formula = f02, data = paris)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -5019520 -2479940    21360  2473329  5052008 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    4.987e+06  9.781e+04  50.992   <2e-16 ***
## hasPool       -3.002e+04  5.757e+04  -0.522    0.602    
## cityCode      -1.575e-01  9.923e-01  -0.159    0.874    
## cityPartRange  8.943e+03  1.002e+04   0.892    0.372    
## basement      -4.045e+00  1.000e+01  -0.404    0.686    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2878000 on 9995 degrees of freedom
## Multiple R-squared:  0.0001236,  Adjusted R-squared:  -0.0002765 
## F-statistic: 0.3089 on 4 and 9995 DF,  p-value: 0.8722
paris$s2<- fitted(reg_lm2,paris,'probabilities')

Dentro de los dos modelos calculados para la estimacion de la variable precio, el modelo 1 cuenta con una mejor estimación, puesto que posee variables explicativas que pueden explicar de forma directa las variaciones de la variable, teniendo una estimacion vastante cercana al valor real. A diferencia del modelo 2.

P2

Realice validación cruzada (CV) a los modelos de la pregunta anterior por el método K-folds con 10 folds. ¿Se mantienen las conclusiones anteriores?.

seed 1

set.seed(12345)
setupRKCV <- trainControl(method = "repeatedcv" , number = 5, repeats= 10)
predRKCV<-train(f01,data=paris,method="lm",trControl= setupRKCV)
print(predRKCV)
## Linear Regression 
## 
## 10000 samples
##     5 predictor
## 
## No pre-processing
## Resampling: Cross-Validated (5 fold, repeated 10 times) 
## Summary of sample sizes: 8000, 8000, 8000, 8000, 8000, 8000, ... 
## Resampling results:
## 
##   RMSE      Rsquared   MAE     
##   2420.665  0.9999993  1965.123
## 
## Tuning parameter 'intercept' was held constant at a value of TRUE

seed 2

set.seed(12345)
setupRKCV1 <- trainControl(method = "repeatedcv" , number = 5, repeats= 10)
predRKCV1<-train(f02,data=paris,method="lm",trControl= setupRKCV1)
print(predRKCV1)
## Linear Regression 
## 
## 10000 samples
##     4 predictor
## 
## No pre-processing
## Resampling: Cross-Validated (5 fold, repeated 10 times) 
## Summary of sample sizes: 8000, 8000, 8000, 8000, 8000, 8000, ... 
## Resampling results:
## 
##   RMSE     Rsquared      MAE    
##   2878559  0.0006052211  2487383
## 
## Tuning parameter 'intercept' was held constant at a value of TRUE

Parte 2; diabetes.

P1

Realice dos modelos de árboles de clasificación de la variable diagnosis. Pruebe cuál modelo clasifica mejor con validación cruzada. Entrene el modelo con un 75% de la muestra y testee con el 25% restante. Explicite qué modelo es mejor y porqué.

Modelo 1

arbol_1 <- rpart(Outcome~Glucose+Age, data=diabetes, method = "class")
rpart.plot(arbol_1, main = "Árbol de Clasificación: Resultado G;A.")

Modelo 2

arbol_2 <- rpart(Outcome~., data=diabetes, method = "class")
rpart.plot(arbol_2, main = "Árbol de Clasificación: Resultado Full")

Validación

set.seed(12345)

div1 <- createDataPartition(diabetes$Outcome, times = 1, p = 0.75, list = F) 
train <- diabetes[div1,] 
test <- diabetes[-div1,]
arbol_01 <- rpart(Outcome~Glucose+Age, data=train, method = "class")

rpart.plot(arbol_01)

prediccion_1 <- predict(arbol_01, newdata = test, type = "class")

matriz01 <- table(test$Outcome, prediccion_1)
matriz01
##    prediccion_1
##       0   1
##   0 100  24
##   1  26  42
precision <- sum(diag(matriz01))/sum(matriz01)
precision
## [1] 0.7395833
arbol_02 <- rpart(Outcome~., data=train, method = "class")

rpart.plot(arbol_02)

prediccion_2 <- predict(arbol_02, newdata = test, type = "class")
matriz02 <- table(test$Outcome, prediccion_2)
matriz02
##    prediccion_2
##      0  1
##   0 99 25
##   1 25 43
precision2 <- sum(diag(matriz02))/sum(matriz02)
precision2
## [1] 0.7395833

El mejor modelo es el modelo 2, ya que permite tener una visualización de todas las posibilidades de las desiciones y variables implicadas en el sistema de la evaluacion diabetica. Lo cual permite que se pueda realizar un analisis exaustivo de la correlacion y causalidad de cada variable.

Parte 3

P1

Realice un gráfico de correlación con todas las variables.

head(general)
summary(general)
names(general)
general1<-na.omit(general)

Todas las variables; V1

samp01 <- general1[sample(.N,200),.(PURCHASES_FREQUENCY,BALANCE, PRC_FULL_PAYMENT)]
ggplot(samp01) +
  geom_point(aes(x=PURCHASES_FREQUENCY,y=BALANCE))

Escogido ya que presenta una baja correlación en comparacion a los demas, teniendo una mayor disperción de datos.

Todas las Variables; V2

samp02 <- general1[sample(.N,200),.(ONEOFF_PURCHASES,PAYMENTS, PURCHASES)]
ggplot(samp02) +
  geom_point(aes(x=ONEOFF_PURCHASES,y=PAYMENTS))

Versión estandar de distribucion tendiendo a normal.

Variables 3

samp03 <- general1[sample(.N,200),.(PURCHASES ,PAYMENTS,CREDIT_LIMIT )]
ggplot(samp03) +
  geom_point(aes(x=PURCHASES ,y=PAYMENTS))

Clusters

fviz_nbclust(x = samp01, FUNcluster = kmeans, method = "wss", k.max = 15, 
diss = get_dist(samp01, method = "euclidean"), nstart = 50)
## Registered S3 methods overwritten by 'broom':
##   method            from  
##   tidy.glht         jtools
##   tidy.summary.glht jtools

fviz_nbclust(x = samp02, FUNcluster = kmeans, method = "wss", k.max = 15, 
diss = get_dist(samp02, method = "euclidean"), nstart = 50)

fviz_nbclust(x = samp03, FUNcluster = kmeans, method = "wss", k.max = 15, 
diss = get_dist(samp03, method = "euclidean"), nstart = 50)

P2

####Proponga dos modelos sobre las cuales segmentar la muestra, en orden de hacer análisis de clusters con el método de kmeans. Explique el por qué utiliza estas variables.

V1

k1<-kmeans(x=samp01,centers=6,nstart=25)

fviz_cluster(k1,data=samp01,geom = "point")

V2

k1<-kmeans(x=samp02,centers=6,nstart=25)

fviz_cluster(k1,data=samp02,geom = "point")

V3

k1<-kmeans(x=samp03,centers=6,nstart=50)

fviz_cluster(k1,data=samp03,geom = "point")

Utilice estas variables para generar dos verciones debido a que todas son varianles numericas y permiter realizar el proceso de Clusters. Pero ademas poseen una cierta separacionentre ellas lo que permite generar varios tipos de agrupaciones. La version 3 es la que posee más sentido para analisis.

Parte 4

P1

Explique la importancia de CV.

El cross validation permite realizar comparaciones entre distintos modelos para poder validar correctamente cual de los dos poseera una mejor explicacion de los datos. Por lo cual nos permitira tomar mejores desiciones conciderando las distintas variaciones o expliaciones que se le puede dar a la regreción.

P2

#¿Qué es la relación espuria? Es un concepto relacionado con la relacion aparente entre las variables, hasta el momento en el que se analiza y se calcula.

P3

¿Qué es overfitting?

Tiene relacion con la generacion de los Clusters en la generacion de las areas, por lo que al generar un exeso de particiones se pierde el analisis de cardacluster en especifico.