pisos <- dget(file="pisos.dge") attach(pisos) library(car) # para utilizar 'recode'. library(gmodels) # para utilizar 'CrossTable' library(MASS) # para utilizar stepAIC # # Si no señalaban disponibilidad de garaje, es seguramente # porque no tenían. # Garaje[is.na(Garaje)] <- 0 pisos[,"Garaje"] <- Garaje # # Categorización de altura de la vivienda # Planta <- recode(Planta,"c(0,1)='Baja' ; c(2,3,4)='Media' ; else='Alta'") pisos[,"Planta"] <- ordered(Planta,levels=c("Baja","Media","Alta")) CA <- as.character(CA) CA[is.na(CA)] <- "No" pisos[,"CA"] <- as.factor(CA) AC <- as.character(AC) AC[is.na(AC)] <- "No" pisos[,"AC"] <- as.factor(AC) rm(Planta,Garaje,AC,CA) # # Nueva variable M2, aproximando los útiles a partir de los # construidos cuando los primeros no constan. # pisos$M2 <- ifelse(is.na(M2util),0.85*M2cons,M2util) detach(pisos) attach(pisos) # # Desglose de la muestra # xtabs( ~ Planta + CP,data=pisos) xtabs( ~ Antiguedad + CP,data=pisos) xtabs( ~ Dormitorios + WC,data=pisos) Tamaño <- cut(M2,breaks=c(0,55,75,90,110,Inf)) xtabs( ~ CP + Tamaño,data=pisos) CrossTable(CP,Tamaño,prop.r=TRUE,prop.c=FALSE, prop.t=FALSE,prop.chisq=FALSE) CrossTable(CP,Tamaño,prop.r=FALSE,prop.c=TRUE, prop.t=FALSE,prop.chisq=FALSE) CrossTable(CP,Antiguedad,prop.r=TRUE,prop.c=FALSE, prop.t=FALSE,prop.chisq=FALSE) CrossTable(CP,Antiguedad,prop.r=FALSE,prop.c=TRUE, prop.t=FALSE,prop.chisq=FALSE) detach(pisos) # # Superficie, precio total y precio/m2 por área # par(las=1) boxplot(M2 ~ CP,ylab="m2",xlab="CP",main="Superficies unitarias por zona", data=pisos) boxplot(Precio ~ CP,ylab="Euros",xlab="CP",main="Precios unitarios por zona", log="y",subset=(TipoInmueble=="piso"),data=pisos) boxplot(Precio/M2 ~ CP,ylab="Euros",xlab="CP",main="Precios/m2 por zona", subset=(TipoInmueble=="piso"),data=pisos) # # Superficie, precio total y precio/m2 por área # boxplot(M2 ~ CP,horizontal=TRUE,xlab="m2 construidos", main="Superficies unitarias por CP",data=pisos) boxplot(Precio ~ CP,horizontal=TRUE,xlab="Euros", main="Precio total",subset=(TipoInmueble=="piso"),data=pisos) boxplot(Precio/M2 ~ CP,horizontal=TRUE,xlab="Euros", main="Precio por m2",subset=(TipoInmueble=="piso"),data=pisos) # # ¿Parecen los pisos "altos" cotizarse más? # scratch <- xtabs(Precio ~ Planta + CP,data=pisos) / xtabs(M2 ~ Planta + CP,data=pisos) barplot(scratch,beside=TRUE,main="Precios/M2 por altura y zona", xlab="CP",ylab="Euros", col=c("mistyrose","lavender","cornsilk"), legend=rownames(scratch)) # # # coplot(log(Precio/M2) ~ M2 | CP,data=pisos) coplot(log(Precio/M2) ~ M2 | Antiguedad,data=pisos) # # Algunos modelos # mod1 <- lm(log(Precio/M2) ~ Planta + Dormitorios + M2 + AC + CA + Ascensor + WC + Antiguedad + Garaje + CP + Comunidad,data=pisos) summary(mod1) anova(mod1) # # Mapa reproducido en el Apéndice # library(sp) library(maptools) # # Señalar las columnas de coordenadas # pisos <- as.data.frame(pisos) pisos <- cbind(pisos,PrecioM2= pisos[,"Precio"] / pisos[,"M2cons"]) coordinates(pisos) <- ~ UTMX + UTMY fich <- "BilbaoDistritos.shp" # Señala camino completo si no está en # tu carpeta de trabajo. xx <- readShapePoly(fich) # Lee el fichero de polígonos. # # Representamos la variable "Precio"; igual podríamos hacer con # cualquier otra (numérica), residuos, etc. # fig <- spplot(pisos, c("PrecioM2") , col.regions=bpy.colors(10), sp.layout=list("sp.polygons",xx,col="black"), scales=list(draw=TRUE), xlim=c(500000,510000), ylim=c(4784500,4793500)) print(fig)