Eficiencia energética de los edificios en Aragón

Estadística descriptiva

Author

Danny Jair Yaguana

Published

February 25, 2025

file.exists("~/INGENIERÍA AMBIENTAL/Semestre 3/Estadística y Probabilidad/Proyecto Eficiencia Energética Aragón/1.Datos")
[1] TRUE

Emisiones de CO2

Variable cuantitativa continua

Valor medible de la cantidad del compuesto gaseoso CO2, liberado a la atmósfera terrestre.

Estadística descriptiva

Buscamos el directorio de trabajo y cargamos la tabla de datos o el dataset:

setwd("~/INGENIERÍA AMBIENTAL/Semestre 3/Estadística y Probabilidad/Proyecto Eficiencia Energética Aragón/1.Datos")

library(readr)
datos <- read.csv("Edificios_Reales.csv", sep = ";", dec = ".")

Verificamos que rstudio nos lea correctamente los datos

str(datos)
'data.frame':   167479 obs. of  17 variables:
 $ Día_Emisión            : int  29 26 26 12 27 17 13 8 7 16 ...
 $ Mes_Emisión            : int  6 9 2 6 6 6 2 4 4 12 ...
 $ Año_Emisión            : int  2013 2013 2014 2013 2013 2013 2014 2014 2014 2013 ...
 $ Emision_CO2            : num  30.1 46.1 20.3 39.2 103.8 ...
 $ Clasificacion_Emisiones: chr  "E" "E" "D" "E" ...
 $ Demanda_energética     : num  142.3 174.4 94.2 187.7 409 ...
 $ Clasificacion_consumo  : chr  "E" "E" "D" "E" ...
 $ Tipo_edificio          : chr  "Vivienda individual" "Vivienda individual" "Vivienda individual" "Vivienda individual" ...
 $ Estado_edificio        : chr  "Existente" "Existente" "Existente" "Existente" ...
 $ Anio_construccion      : int  1962 1974 1999 1970 1965 1968 1966 1963 2006 1970 ...
 $ Superficie_m2          : num  49 81 72 65 46 ...
 $ Municipio              : chr  "ZARAGOZA" "ZARAGOZA" "ZARAGOZA" "ZARAGOZA" ...
 $ Provincia              : chr  "ZARAGOZA" "ZARAGOZA" "ZARAGOZA" "ZARAGOZA" ...
 $ Coordenadas._x         : num  674904 674063 671872 676129 674807 ...
 $ Coordenadas._y         : num  4612931 4612970 4612102 4613402 4613068 ...
 $ Anio_emision           : int  2013 2013 2014 2013 2013 2013 2014 2014 2014 2013 ...
 $ Dias_hasta_expiracion  : int  3652 3652 3652 3652 3652 3652 3652 3653 3653 3652 ...

Cargamos la variable

CO2<-datos$Emision_CO2
n<-length(CO2)
n
[1] 167479

Por la gran cantidad de datos, es mejor verificar el comportamiento general de la variable para saber si toca realizar el analisis estadístico en un cierto intervalo. Es así, que se crea un historama para saber el intervalo donde se agrupan los datos:

Histo_CO2 <-hist(CO2, main = "Gráfica N°12.1.00.-Distribución de frecuencia de las 
emisiones de CO2  de los edificios en la Comunidad Autónoma de Aragón",
                  ylab="Cantidad",xlab="Emisiones de CO2 (kg)",
                  col="brown")

Una mejor visualización de la variable en Aragón:

Imagen 1. Mapa de las emisiones de CO2 en la Comunidad Autónoma de Aragón.

Como tal, vemos que la variable se agrupa en un intervalo dado, entonces obtenemos un subconjunto de la variable para ese intervalo y revisamos el nuevo tamaño muestral.

CO2_5000 <- data.frame(subset(datos, Superficie_m2 <5000, select = c(Superficie_m2)))
CO2<-CO2_5000$Superficie_m2
n<-length(CO2)
n
[1] 167450

A continuación, creamos nuevamente un histograma para saber si es necesario analizar otro subconjunto o con que que tenemos es el ideal:

Histo_CO2 <-hist(CO2, main = "Gráfica N°12.1.01.-Distribución de frecuencia de las
emisiones de CO2  de los edificios en la Comunidad Autónoma de Aragón",
                  ylab="Cantidad",xlab="Emisiones de CO2 (kg)",
                  col="brown")

Como se observa, es necesario una nueva división, en este caso, se a seleccionado el intervalo que comprenden los valores entre 0 y 140 de la variables .

CO2_140 <- data.frame(subset(datos, Superficie_m2 <140, select = c(Superficie_m2)))
CO2<-CO2_140$Superficie_m2

Verificamos el nuevo tamaño muestral

n<-length(CO2)
n
[1] 123445

Por teoría, solo es recomendable hacer hasta tres divisiones de un conjunto de datos, entonces, procedemos a crear la tabla de frecuencias:

Tabla de frecuencias

Mediante la ley de Sturges, encontramos el valor total de intervalos que se recomienda para nuestro tamaño muestral:

k <-round(1+3.3*log10(n),0)
k
[1] 18

Y encontramos el rango, amplitud, límites de los intervalos, marca de clase, frecuencias y frecuencias acumuladas.

summary(CO2)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   2.30   56.80   70.00   73.82   88.38  139.99 
min<-summary(CO2)[1]
min
Min. 
 2.3 
max<-summary(CO2)[6]
max
  Max. 
139.99 
R<-max-min
A<-R/k
Li<-seq(min,max-A,by=A)
Ls<-seq(min+A,max,by=A)
Mc<-(Ls+Li)/2

ni <- c(0)

for (i in 1:k) {
  if(i==k)
    I <- subset(CO2, CO2>=Li[i] & CO2<=Ls[i])
  else
    I <- subset(CO2, CO2>=Li[i] & CO2<=Ls[i])
  ni[i] <- length(I)
}

n<-sum(ni)
hi<- (ni/n)*100
Ni<- cumsum(ni)
Ni_dsc <- rev(cumsum(rev(ni)))
Hi<- cumsum(hi)
Hi_dsc <- rev(cumsum(rev(hi)))

TDF_CO2<-data.frame(Li,Ls,Mc,ni,round(hi,2),Ni,round(Hi,2),Ni_dsc,round(Hi_dsc,2))
options(scipen=999)
colnames(TDF_CO2)<-c("Li","Ls","Marca de Clase","ni","hi (%)","Ni","Hi (%)","Ni_dsc","Hi_dsc (%)")

library(knitr)
Warning: package 'knitr' was built under R version 4.4.2
kable(TDF_CO2, format = "markdown", caption = "Tabla 1. Frecuencias")
Tabla 1. Frecuencias
Li Ls Marca de Clase ni hi (%) Ni Hi (%) Ni_dsc Hi_dsc (%)
2.300000 9.949444 6.124722 17 0.01 17 0.01 123445 100.00
9.949444 17.598889 13.774167 150 0.12 167 0.14 123428 99.99
17.598889 25.248333 21.423611 542 0.44 709 0.57 123278 99.86
25.248333 32.897778 29.073056 1329 1.08 2038 1.65 122736 99.43
32.897778 40.547222 36.722500 4366 3.54 6404 5.19 121407 98.35
40.547222 48.196667 44.371944 9097 7.37 15501 12.56 117041 94.81
48.196667 55.846111 52.021389 13441 10.89 28942 23.45 107944 87.44
55.846111 63.495556 59.670833 17004 13.77 45946 37.22 94503 76.55
63.495556 71.145000 67.320278 18009 14.59 63955 51.81 77499 62.78
71.145000 78.794444 74.969722 13531 10.96 77486 62.77 59490 48.19
78.794444 86.443889 82.619167 12300 9.96 89786 72.73 45959 37.23
86.443889 94.093333 90.268611 10709 8.68 100495 81.41 33659 27.27
94.093333 101.742778 97.918056 6530 5.29 107025 86.70 22950 18.59
101.742778 109.392222 105.567500 4802 3.89 111827 90.59 16420 13.30
109.392222 117.041667 113.216944 3940 3.19 115767 93.78 11618 9.41
117.041667 124.691111 120.866389 3009 2.44 118776 96.22 7678 6.22
124.691111 132.340556 128.515833 2656 2.15 121432 98.37 4669 3.78
132.340556 139.990000 136.165278 2013 1.63 123445 100.00 2013 1.63

Como se oberva, la tabla es muy complicada de visualizar por los números decimales, y la cantidad de datos, entonces creamos una nueva tabla simplificada con ayuda del histograma de R.

#Simplificacion (LOCAL PORPORCIONES, MIN Y MAXIMO)
Histo_CO2 <-hist(CO2, main = "Gráfica N°12.1.02.-Distribución de frecuencia de las 
emisiones de CO2  de los edificios en la Comunidad Autónoma de Aragón",
                  ylab="Cantidad",xlab="Emisiones de CO2 (kg)",
                  col="brown")

h<-length(Histo_CO2$counts)
j<-length(Histo_CO2$counts)+1

min_s<- Histo_CO2$breaks[1]
max_s<- Histo_CO2$breaks[j]
R_s<-(max_s+min_s)/2
A_s<-R_s/h
A_s
[1] 5
Li_s <- Histo_CO2$breaks[1:h]
Li_s
 [1]   0  10  20  30  40  50  60  70  80  90 100 110 120 130
Ls_s <-Histo_CO2$breaks[2:j]
Ls_s
 [1]  10  20  30  40  50  60  70  80  90 100 110 120 130 140
MCs<-Histo_CO2$mids
MCs
 [1]   5  15  25  35  45  55  65  75  85  95 105 115 125 135
#De la gráfica sacamos ahora la nueva tabla de frecuencias.
ni_s<-Histo_CO2$counts
n<-sum(ni_s)
n
[1] 123445
hi<-ni_s/n*100
Ni_s<-cumsum(ni_s)
Hi<-cumsum(hi)
Ni_dsc<-rev(cumsum(rev(ni_s)))
Hi_dsc<-rev(cumsum(rev(hi)))

TDFsimplificado<-data.frame(Li_s,Ls_s,MCs,ni_s,round(hi,2),Ni_s,round(Hi,2),Ni_dsc,round(Hi_dsc,2))
colnames(TDFsimplificado)<-c("Li","Ls","MC","ni","hi (%)","Ni","Hi (%)","Ni_dsc","Hi_dsc (%)")

library(knitr)
kable(TDFsimplificado, format = "markdown", caption = "Tabla 2. Frecuencias de la variable simplificada")
Tabla 2. Frecuencias de la variable simplificada
Li Ls MC ni hi (%) Ni Hi (%) Ni_dsc Hi_dsc (%)
0 10 5 20 0.02 20 0.02 123445 100.00
10 20 15 268 0.22 288 0.23 123425 99.98
20 30 25 1171 0.95 1459 1.18 123157 99.77
30 40 35 4623 3.74 6082 4.93 121986 98.82
40 50 45 12415 10.06 18497 14.98 117363 95.07
50 60 55 19926 16.14 38423 31.13 104948 85.02
60 70 65 23470 19.01 61893 50.14 85022 68.87
70 80 75 18543 15.02 80436 65.16 61552 49.86
80 90 85 15865 12.85 96301 78.01 43009 34.84
90 100 95 9804 7.94 106105 85.95 27144 21.99
100 110 105 6375 5.16 112480 91.12 17340 14.05
110 120 115 4786 3.88 117266 94.99 10965 8.88
120 130 125 3536 2.86 120802 97.86 6179 5.01
130 140 135 2643 2.14 123445 100.00 2643 2.14

Gráficas

Creamos el histograma con la frecuencia absoluta para visualizar el conteo de ocurrencias de los valores de la variable.

hist(CO2, main = "Gráfica N°12.1.1.-Distribución de frecuencia de las 
emisiones de CO2  de los edificios en la Comunidad Autónoma de Aragón",ylab="Cantidad",xlab="Emisiones de CO2 (kg)",
     col = "skyblue") 

hist(CO2, main = "Gráfica N°12.1.2.-Distribución de frecuencia de las 
emisiones de CO2  de los edificios en la Comunidad Autónoma de Aragón",ylab="Cantidad",xlab="Emisiones de CO2 (kg)",
     col = "skyblue",ylim=c(0,n))

Ahora, creamos el histograma con la frecuencia relativa para visualizar el porcentaje de ocurrencias de los valores.

barplot(TDFsimplificado$`hi (%)`, space = 0,main = "Gráfica N°12.1.3.-Porcentaje de las 
emisiones de CO2  de los edificios en la Comunidad Autónoma de Aragón",ylab="Porcentaje (%)",xlab="Emisiones de CO2 (kg)",
        col = "red3",names.arg = TDFsimplificado$MC,axis.lty = 1,cex.names = 0.8)

barplot(TDFsimplificado$`hi (%)`, space = 0,main = "Gráfica N°12.1.4.-Porcentaje de las 
emisiones de CO2  de los edificios en la Comunidad Autónoma de Aragón",ylab="Porcentaje (%)",xlab="Emisiones de CO2 (kg)",
        col = "red3",names.arg = TDFsimplificado$MC,axis.lty = 1,cex.names = 0.8,
        ylim = c(0,100))

A diferencia de las demás variables, las de tipo continuas no aceptan el diagrama de sector circular por el motivo de que la probabilidad de que se repita un suceso en casi o es cero, así que se omite y se crea el diagrama de caja que nos ayuda con la representación de los cuartiles de la variable, donde el cuartil 2 representa la mediana de la variable. Además, nos representa los valores atípicos (outliers) en nuestro intervalo de estudio.

caja<-boxplot(CO2, horizontal = T, col = "salmon", 
        main= "Gráfica N°12.1.5.-Distribución de las emisiones de CO2 de los 
        edificios de la Comunidad Autónoma de Aragón", xlab="Emisiones de CO2 (Kg)")

Adicionalmente, se crean las ojivas que nos representa las frecuencias acumuladas y, de igual manera, el intercepto de las gráficas de la ojiva ascendente y la descendente representa la mediana en el eje horizontal.

x<-1:h

plot(x,TDFsimplificado$Ni, type = "b",col="green3",ylab = "Cantidad",
     xlab="Emisiones de CO2 (kg)", main= "Gráfica N°12.1.6.-Distribución de las emisiones de CO2 
     de los edificios de la Comunidad Autónoma de Aragón",xaxt="n")
lines(TDFsimplificado$Ni_dsc, add=TRUE,type="b")
Warning in plot.xy(xy.coords(x, y), type = type, ...): "add" es un parámetro
gráfico inválido
axis(1,at=x,labels = TDFsimplificado$MC, cex.axis=0.7)
legend("right", legend = c("Ni ascendente", "Ni descendente"), col = c("green3", "black"), lty = 1, pch = 0.4,
       cex = 0.6, pt.cex = 1)

plot(x,TDFsimplificado$`Hi (%)`, type = "b",col="green3",ylab = "Porcentaje (%)",
     xlab="Emisiones de CO2 (kg)", main= "Gráfica N°12.1.7.-Distribución del porcentaje de las emisiones de CO2
     , de los edificios de la Comunidad Autónoma de Aragón",xaxt="n")
axis(1,at=x,labels = TDFsimplificado$MC, cex.axis=0.7)
lines(TDFsimplificado$Hi_dsc, add=TRUE,type="b")
Warning in plot.xy(xy.coords(x, y), type = type, ...): "add" es un parámetro
gráfico inválido
legend("right", legend = c("Hi ascendente", "Hi descendente"), col = c("green3", "black"), lty = 1, pch = 0.4,
       cex = 0.6, pt.cex = 1)

Indicadores

Los indicadores estadísticos son valores numéricos que resumen, describen y analizan características de un conjunto de datos. Estos indicadores permiten simplificar y entender grandes volúmenes de información de manera más eficiente. Se utilizan para tomar decisiones informadas.

ri<-min(CO2)
rs<-max(CO2)
mediana<-median(CO2)
mediana
[1] 70
media_aritmetica<-mean(CO2)
media_aritmetica
[1] 73.82297
desviación_estandar<-sd(CO2)
desviación_estandar
[1] 23.7569
coeficiente_variabilidad <- (desviación_estandar/media_aritmetica) * 100 
coeficiente_variabilidad
[1] 32.1809
library(e1071)
Warning: package 'e1071' was built under R version 4.4.2
coeficiente_asimetria <- skewness(CO2) 
coeficiente_asimetria
[1] 0.5500305
curtosis<-kurtosis(CO2)
curtosis
[1] -0.05145367
# Identificar los valores atípicos 
outliers<-boxplot.stats(CO2)$out 
# Contar los valores atípicos 
num_outliers <- length(outliers) 
num_outliers
[1] 1102
minimooutliers<-min(outliers)
minimooutliers
[1] 2.3
max1<-caja$stats[1]
max1
[1] 9.5
min2<-caja$stats[5]
maximooutliers<-max(outliers)
maximooutliers
[1] 139.99
Variable<-c("Emisiones de CO2")


Tabla_indicadores<-data.frame(Variable,ri,rs,round(media_aritmetica,2),mediana,round(desviación_estandar,2), round(coeficiente_variabilidad,2), round(coeficiente_asimetria,2),round(curtosis,2))
colnames(Tabla_indicadores)<-c("Variable","minimo","máximo","x","Me","s","Cv (%)","As","K")

library(knitr)
kable(Tabla_indicadores, format = "markdown", caption = "Tabla 3. Indicadores estadíticos de la variable Emisiones de CO2")
Tabla 3. Indicadores estadíticos de la variable Emisiones de CO2
Variable minimo máximo x Me s Cv (%) As K
Emisiones de CO2 2.3 139.99 73.82 70 23.76 32.18 0.55 -0.05
Tabla_outliers<-data.frame(num_outliers,minimooutliers,max1,min2,maximooutliers)

colnames(Tabla_outliers)<-c("Outliers","minimo 1","máximo 1","mínimo 2","máximo")

library(knitr)
kable(Tabla_outliers, format = "markdown", caption = "Tabla 4. Outliers de la variable")
Tabla 4. Outliers de la variable
Outliers minimo 1 máximo 1 mínimo 2 máximo
1102 2.3 9.5 135.75 139.99

Conclusiones

Las Emisiones de CO2 de los edificos de la Comunidad Autónoma de Aragón, fructua entre 2.30 (Kg) a 139.99 (Kg), los valores están en torno a 73.82 (kg) que tiene una desviación estándar de 23.76 (kg). El conjunto de datos es débilmente homogeneo con una acumulación de datos en los valores centrales de la variable levente segada a la derecha con una concentración mediana de los datos. Además, presenta valores atípicos, con un total de 1102 valores que se dividen en dos grupos, desde 2.3 a 9.5 y desde 135.75 a 139.99. Por lo antes mencionado, el comportamiento de la variable es levemente beneficiosa para el medioambiente porque, aunque los valores de emisiones no son altas y son muy elevadas comparada con otras ciudades, la tendencia de la variable se concentra en el centro.