Advertisement
kukis03

Taller 6 modelos

Dec 16th, 2023
24
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.21 KB | None | 0 0
  1. ---
  2. title: "Taller 6_Modelos I"
  3. output: pdf_document
  4. ---
  5.  
  6. ```{r setup, include=FALSE}
  7. knitr::opts_chunk$set(echo = TRUE)
  8. # Set so that long lines in R will be wrapped:
  9. knitr::opts_chunk$set(tidy.opts=list(width.cutoff=70),tidy=TRUE)
  10. ```
  11.  
  12. # Unidad 8: Construcción del modelo de regresión lineal simple.
  13.  
  14.  
  15. ## Dataset: SMA
  16.  
  17. Considere los datos sobre 141 áreas metropolitanas estándar en los Estados Unidos (sma.txt). Los datos proporcionan información sobre 11 variables para cada área para el período 1976-1977. Las zonas se han dividido en 4 regiones geográficas: 1=Noreste, 2=Norte-Centro, 3=Sur,
  18. 4=Oeste. Las variables proporcionadas son las siguientes:
  19.  
  20.  
  21. Área: tamaño de la tierra en millas cuadradas
  22. Población total: estimada en miles
  23. Porcentaje ciudad: porcentaje de la población en el centro de la ciudad / ciudades
  24. Porcentaje senior: porcentaje de personas mayores de $\leq$ 65 años
  25. Médicos: número de médicos profesionalmente activos
  26. Camas de hospital: número total de camas de hospital
  27. Graduados: porcentaje de adultos que terminaron la escuela secundaria
  28. Laboral: número de personas en la fuerza laboral en miles
  29. Ingresos: ingresos totales en 1976 en millones de dólares
  30. Delitos: número de delitos graves
  31. Región: región geográfica según el Censo de los Estados Unidos
  32.  
  33. La variable respuesta que estamos interesados en modelar es la tasa de delitos por cada mil habitantes (Delitos/Población total).
  34.  
  35. ```{r}
  36. sma <- read.table("D:/Descargas/DATABASES/sma.txt", quote="\"", comment.char="")
  37. sma=sma[,-1]
  38. names(sma) <- c('Area', 'PobT', 'PCiudad', 'PSenior', 'Medicos', 'CHosp', 'Grad', 'Laboral', 'Ingresos', 'Delitos', 'Region')
  39. head(sma)
  40. #summary(sma)
  41.  
  42.  
  43. # Variable de respuesta
  44. sma$TDelitos <- sma$Delitos/sma$PobT
  45. summary(sma$TDelitos)
  46. hist(sma$TDelitos, xlab = "Tasa de delitos", main = "Histograma de la tasa de delitos")
  47. boxplot(sma$TDelitos)
  48. ```
  49.  
  50. ## 1. Divida aleatoriamente el set de datos en tres partes, una para la construcción del modelo, otra para la validación y finalmente otra para la estimación final. Compruebe que el tamaño del set de construcción del modelo y la estimación final cumpla con el requerimiento mínimo (n $>$ 5P, recordando que para la variable región, se estimaría 3 parámetros). Utilice como P el número de coeficientes en un modelo aditivo de primer orden incluyendo todas las variables explicativas.
  51.  
  52.  
  53. ```{r}
  54. sma$Region_n=sma$Region
  55. sma$Region_n[sma$Region_n==1]="Noreste"
  56. sma$Region_n[sma$Region_n==2]="Norte-Centro"
  57. sma$Region_n[sma$Region_n==3]="Sur"
  58. sma$Region_n[sma$Region_n==4]="Oeste"
  59. sma$Region_n=factor(sma$Region_n)
  60.  
  61.  
  62.  
  63. set.seed(198)
  64. samp=sample(1:141, size= 61 ,replace = F)
  65. set.seed(254)
  66. samp2=sample(c(1:141)[-samp], size= 61 ,replace = F)
  67. training=sma[samp,]
  68. validation=sma[-c(samp,samp2),]
  69. estimation=sma[samp2,]
  70. ```
  71.  
  72.  
  73. ## 2. Seleccione un conjunto de modelos de regresión lineal basado en el "training set". Las variables que no se considerarán en la búsqueda serán la población total y la región. Éstas son variables protegidas por ser de interés en el análisis. Utilice distintas técnicas de selección en procesos de búsqueda automática: Si distintos criterios seleccionan distintos modelos, escoja todos los "mejores modelos".
  74.  
  75. ### 2.1 Estime el modelo completo (modelo aditivo de primer orden) y calcule: Adjusted R-squared, Mallow's CP, AIC y BIC.
  76.  
  77. ```{r}
  78. modelo0=lm(TDelitos~.-PobT-Delitos-Region,data=training)
  79. summary(modelo0)
  80. ```
  81.  
  82. El $R^{2}$ ajustado:
  83.  
  84. ```{r}
  85. summary(modelo0)$adj.r.squared
  86. ```
  87.  
  88. El criterio Mallow's Cp:
  89.  
  90. ```{r}
  91. sigma2est=sigma(modelo0)^2
  92. ssep=sigma(modelo0)^2*summary(modelo0)$df[2]
  93.  
  94. (cp2=ssep/sigma2est-(nrow(training)-2*length(coef(modelo0))))
  95. ```
  96. Que es el número de parametros, como era de esperarse.
  97.  
  98. El AIC:
  99.  
  100. ```{r}
  101. AIC(modelo0)
  102. ```
  103.  
  104. Y el BIC:
  105.  
  106. ```{r}
  107. BIC(modelo0)
  108. ```
  109.  
  110.  
  111.  
  112. ### 2.2 De la librería leaps, utilice la función leaps para comparar modelos usando los métodos Adjusted R-squared y Mallow's CP. Escoja el mejor modelo en base a cada uno de los criterios.
  113.  
  114. ```{r}
  115. suppressWarnings(library(leaps))
  116. x=model.matrix(modelo0)[,-1]
  117. y=training[,12]
  118.  
  119. modeloleapsCP=leaps(x,y,method="Cp",nbest=1)
  120. modeloleapsCP
  121. bestcp=function(which,cpvec,names){
  122. #esta función está diseñada para cuando se usa nbest=1 en la función leaps.
  123. pcom=seq(1:length(cpvec))+1
  124. pcomrest=pcom[-length(pcom)]
  125. cpvecrest=cpvec[-length(cpvec)]
  126. if(all((cpvecrest<pcomrest)==FALSE)){
  127. print("Todos los Cp son mayores al número de variables. Se devuelve el modelo completo.")
  128. return(names[which[length(cpvec),]])
  129. }
  130. pvalid=ifelse(cpvecrest>=pcomrest,NA,cpvecrest)
  131. i=which.min(pcomrest-pvalid)
  132. if((pcomrest-pvalid)[i]>=1){
  133. print("Precaución: El valor del Cp está algo alejado del número de parámetros.")
  134. }
  135. cat("Índice del valor de cp en el vector de cp más cercano al número de parámetros: ",i,"\n")
  136. print("Variables asociadas:")
  137. return(names[which[i,]])
  138. }
  139.  
  140. (vexp=bestcp(modeloleapsCP$which,modeloleapsCP$Cp,colnames(x)))
  141.  
  142. if (any(grepl("^Region_n", vexp))) {
  143. vexp=unique(ifelse(grepl("^Region_n", vexp), "Region_n", vexp))
  144. }
  145.  
  146. form=as.formula(paste("TDelitos ~", paste(vexp, collapse = "+")))
  147.  
  148. xper=lm(form,data=training)
  149.  
  150. modeloleapsAR=leaps(x,y,method="adjr2",nbest=1)
  151. (vexp2=colnames(x)[modeloleapsAR$which[which.max(modeloleapsAR$adjr2),]])
  152.  
  153. if (any(grepl("^Region_n", vexp2))) {
  154. vexp2=unique(ifelse(grepl("^Region_n", vexp2), "Region_n", vexp2))
  155. }
  156.  
  157. form2=as.formula(paste("TDelitos ~", paste(vexp2, collapse = "+")))
  158.  
  159. xper2=lm(form2,data=training)
  160. ```
  161.  
  162. ### 2.3 De la librería MASS utilice la función stepAIC para realizar una stepwise regression (mezclando hacia delante y hacia atrás) basado en AIC y BIC. Con el argumento scope puede indicar el modelo mínimo y el máximo. Por ejemplo para indicar que el mínimo debe incluir las variables protegidas y el máximo todas las variables puede usar scope = list(lower=~PobT+factor(Region),upper=~.). El argumento direction indica si desea realizar backward elimination, forward incluision o stepwise regression.
  163.  
  164. ```{r}
  165. library(MASS)
  166. (xper3=stepAIC(modelo0,scope=list(lower=~Region_n,upper=~.-Region),direction="both",trace=F))
  167.  
  168. (xper4=stepAIC(modelo0,scope=list(lower=~Region_n,upper=~.-Region),direction="both",trace=F,k=log(nrow(training))))
  169. ```
  170.  
  171. ### 2.4 En los modelos escogidos con los 4 métodos incluya términos de interacción y realice una nueva selección en cada modelo esta vez usando la función stepAIC con el criterio AIC. Pista: scope = list(lower=~PobT+factor(Region),upper=~.^2).
  172.  
  173.  
  174. ```{r}
  175. # newxper=update(xper, ~.^2)
  176. # newxper2=update(xper2, ~.^2)
  177. # newxper3=update(xper3, ~.^2)
  178. # newxper4=update(xper4, ~.^2)
  179.  
  180. (real=stepAIC(xper,scope=list(lower=~Region_n,upper=~.^2),direction="both",trace=F))
  181. (real2=stepAIC(xper2,scope=list(lower=~Region_n,upper=~.^2),direction="both",trace=F))
  182. (real3=stepAIC(xper3,scope=list(lower=~Region_n,upper=~.^2),direction="both",trace=F))
  183. (real4=stepAIC(xper4,scope=list(lower=~Region_n,upper=~.^2),direction="both",trace=F))
  184.  
  185. ```
  186.  
  187.  
  188. ## 3. Valide todos los modelos seleccionados en la sección 2 usando el set de validación. Estime los modelos, compare los coeficientes estimados y los errores estándares con los modelos del literal 2. Calcule la media cuadrática del error de predicción y compárelo con el MSE. Escoja el modelo que tenga menor discrepancia entre MSE y MSEP.
  189.  
  190. Para el modelo basado en el criterio Mallow's Cp:
  191.  
  192. ```{r}
  193. modcp=formula(xper)
  194. modeloCp_val=lm(modcp, data = validation)
  195.  
  196. coef(modeloCp_val)
  197. sigma(modeloCp_val)
  198. coef(xper)
  199. sigma(xper)
  200. ```
  201. Vemos que los coeficientes han cambiado, algunos bastante, como el Intercepto y PSenior, y otros menos, como Medicos y Region_nOeste.
  202. El modelo en el set de validación tiene menor error estándar.
  203.  
  204. ```{r}
  205. H21=model.matrix(modeloCp_val)%*%solve(crossprod(model.matrix(modeloCp_val)))%*%t(model.matrix(modeloCp_val))
  206. presspcp_val=sum((residuals(modeloCp_val)/(1-diag(H21)))^2)
  207. msepcp_val=presspcp_val/nrow(validation)
  208.  
  209. msepcp_val-sigma(xper)^2
  210. ```
  211.  
  212. Para el modelo basado en $R^{2}$:
  213.  
  214. ```{r}
  215. modr2=formula(xper2)
  216. modeloR2_val=lm(modr2, data = validation)
  217. coefficients(modeloR2_val)
  218. sigma(modeloR2_val)
  219. coefficients(xper2)
  220. sigma(xper2)
  221. ```
  222. Los cambios más grandes se producen en el intercepto, y en las variables Grad y PSenior. El resto de variables mantienen bastante cercanas a las del modelo del literal 2 (aunque PCiudad ahora es negativa)
  223.  
  224. Los errores estándares son similares.
  225.  
  226. ```{r}
  227. H22=model.matrix(modeloR2_val)%*%solve(crossprod(model.matrix(modeloR2_val)))%*%t(model.matrix(modeloR2_val))
  228. presspR2_val=sum((residuals(modeloR2_val)/(1-diag(H22)))^2)
  229. msepR2_val=presspR2_val/nrow(validation)
  230.  
  231. msepR2_val-sigma(xper2)^2
  232. ```
  233.  
  234. Para el modelo basado en el AIC:
  235.  
  236. ```{r}
  237. modaic=formula(xper3)
  238. modeloAIC_val=lm(modaic, data = validation)
  239. coefficients(modeloAIC_val)
  240. sigma(modeloAIC_val)
  241. coefficients(xper3)
  242. sigma(xper3)
  243. ```
  244. Los mayores cambios están en intercepto y PSenior. Grad y PCiudad también tienen unos cuantos cambios. Los errores estándares son muy similares.
  245.  
  246. ```{r}
  247. H23=model.matrix(modeloAIC_val)%*%solve(crossprod(model.matrix(modeloAIC_val)))%*%t(model.matrix(modeloAIC_val))
  248. presspAIC_val=sum((residuals(modeloAIC_val)/(1-diag(H23)))^2)
  249. msepAIC_val=presspAIC_val/nrow(validation)
  250.  
  251. msepAIC_val-sigma(xper3)^2
  252. ```
  253.  
  254. Para el modelo con BIC:
  255.  
  256. ```{r}
  257. modbic=formula(xper4)
  258. modeloBIC_val=lm(modbic, data = validation)
  259. coefficients(modeloBIC_val)
  260. sigma(modeloBIC_val)
  261. coefficients(xper4)
  262. sigma(xper4)
  263. ```
  264.  
  265. Hay ciertos cambios en el intercepto y PSenior, pero no son tan pronunciados como en modleos anteriores. El error estándar del modelo en validación es menor.
  266.  
  267. ```{r}
  268. H24=model.matrix(modeloBIC_val)%*%solve(crossprod(model.matrix(modeloBIC_val)))%*%t(model.matrix(modeloBIC_val))
  269. presspBIC_val=sum((residuals(modeloBIC_val)/(1-diag(H24)))^2)
  270. msepBIC_val=presspBIC_val/nrow(validation)
  271.  
  272. msepBIC_val-sigma(xper4)^2
  273. ```
  274.  
  275. La discrepancia entre la MSEP y MSE es menor en el modelo con base en el Cp.
  276.  
  277. ## 4. Estime el modelo seleccionado en el literal 3 usando el set de estimación. Presente el resumen del modelo estimado.
  278.  
  279. ```{r}
  280. defi=lm(modcp,estimation)
  281. summary(defi)
  282. ```
  283.  
  284.  
  285.  
  286.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement