Eficiencia energética de los edificios en Aragón

Informe estadístico

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

Consumo energético

Variable cuantitativa continua

Indica la cantidad de energía eléctrica utilizada por cada unidad de superficie del edificio durante un periodo de tiempo (hora y unidad de año)

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

demanda_energética<-datos$Demanda_energética
n<-length(demanda_energética)
n
[1] 167479

Por la gran cantidad de datos, es mejor verificar el compotamiento 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:

#Simplificacion (LOCAL PORPORCIONES, MIN Y MAXIMO)
Histo_demanda_energética <-hist(demanda_energética, main = "Gráfica N°14.1.00.-Distribución de frecuencia del 
                                consumo energética de los edificios en la Comunidad Autónoma de Aragón",
                 ylab="Cantidad",xlab="Consumo energético KWh/m2/año",
                 col="brown")

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.

Demanda energética entre 0 y 5000

demanda_energética_20000 <- data.frame(subset(datos, Demanda_energética <5000, select = c(Demanda_energética)))
demanda_energética<-demanda_energética_20000$Demanda_energética
n<-length(demanda_energética)
n
[1] 167274

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

Histo_demanda_energética <-hist(demanda_energética, main = "Gráfica N°14.1.01.-Distribución de frecuencia del
consumo energético  de los edificios en la Comunidad Autónoma de Aragón",
                 ylab="Cantidad",xlab="Consumo energético KWh/m2/año",
                 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 600 de la variables .

demanda_energética_600 <- data.frame(subset(datos, Demanda_energética <600, select = c(Demanda_energética)))
demanda_energética<-demanda_energética_600$Demanda_energética

Verificamos el nuevo tamaño muestral

n<-length(demanda_energética)
n
[1] 163859

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(demanda_energética)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    0.0   178.4   239.2   250.1   309.9   599.9 
min<-summary(demanda_energética)[1]
min
Min. 
   0 
max<-summary(demanda_energética)[6]
max
  Max. 
599.88 
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(demanda_energética, demanda_energética>=Li[i] & demanda_energética<=Ls[i])
  else
    I <- subset(demanda_energética, demanda_energética>=Li[i] & demanda_energética<=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_demanda_energética<-data.frame(Li,Ls,Mc,ni,round(hi,2),Ni,round(Hi,2),Ni_dsc,round(Hi_dsc,2))
options(scipen=999)
colnames(TDF_demanda_energética)<-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_demanda_energética, format = "markdown", caption = "Tabla 1. Frecuencias de los valores de la Variable")
Tabla 1. Frecuencias de los valores de la Variable
Li Ls Marca de Clase ni hi (%) Ni Hi (%) Ni_dsc Hi_dsc (%)
0.00000 33.32667 16.66333 1168 0.71 1168 0.71 163877 100.00
33.32667 66.65333 49.99000 2535 1.55 3703 2.26 162709 99.29
66.65333 99.98000 83.31667 4580 2.79 8283 5.05 160174 97.74
99.98000 133.30667 116.64333 10286 6.28 18569 11.33 155594 94.95
133.30667 166.63333 149.97000 15672 9.56 34241 20.89 145308 88.67
166.63333 199.96000 183.29667 20869 12.73 55110 33.63 129636 79.11
199.96000 233.28667 216.62333 22752 13.88 77862 47.51 108767 66.37
233.28667 266.61333 249.95000 22012 13.43 99874 60.94 86015 52.49
266.61333 299.94000 283.27667 18433 11.25 118307 72.19 64003 39.06
299.94000 333.26667 316.60333 13758 8.40 132065 80.59 45570 27.81
333.26667 366.59333 349.93000 10169 6.21 142234 86.79 31812 19.41
366.59333 399.92000 383.25667 7319 4.47 149553 91.26 21643 13.21
399.92000 433.24667 416.58333 5086 3.10 154639 94.36 14324 8.74
433.24667 466.57333 449.91000 3356 2.05 157995 96.41 9238 5.64
466.57333 499.90000 483.23667 2297 1.40 160292 97.81 5882 3.59
499.90000 533.22667 516.56333 1641 1.00 161933 98.81 3585 2.19
533.22667 566.55333 549.89000 1090 0.67 163023 99.48 1944 1.19
566.55333 599.88000 583.21667 854 0.52 163877 100.00 854 0.52

Como se observa, 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.

Histo_demanda_energética <-hist(demanda_energética, main = "Gráfica N°14.1.02.-Distribución de frecuencia del
                                consumo energético de los edificios en la Comunidad Autónoma de Aragón",
                 ylab="Cantidad",xlab="Consumo energético KWh/m2/año",
                 col="brown")

h<-length(Histo_demanda_energética$counts)
j<-length(Histo_demanda_energética$counts)+1

min_s<- Histo_demanda_energética$breaks[1]
max_s<- Histo_demanda_energética$breaks[j]
R_s<-(max_s+min_s)/2
A_s<-R_s/h
A_s
[1] 25
Li_s <- Histo_demanda_energética$breaks[1:h]
Li_s
 [1]   0  50 100 150 200 250 300 350 400 450 500 550
Ls_s <-Histo_demanda_energética$breaks[2:j]
Ls_s
 [1]  50 100 150 200 250 300 350 400 450 500 550 600
MCs<-Histo_demanda_energética$mids
MCs
 [1]  25  75 125 175 225 275 325 375 425 475 525 575
#De la gráfica sacamos ahora la nueva tabla de frecuencias.
ni_s<-Histo_demanda_energética$counts
n<-sum(ni_s)
n
[1] 163859
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 simplificado")
Tabla 2.Frecuencias simplificado
Li Ls MC ni hi (%) Ni Hi (%) Ni_dsc Hi_dsc (%)
0 50 25 1940 1.18 1940 1.18 163859 100.00
50 100 75 6351 3.88 8291 5.06 161919 98.82
100 150 125 17256 10.53 25547 15.59 155568 94.94
150 200 175 29593 18.06 55140 33.65 138312 84.41
200 250 225 33685 20.56 88825 54.21 108719 66.35
250 300 275 29495 18.00 118320 72.21 75034 45.79
300 350 325 19033 11.62 137353 83.82 45539 27.79
350 400 375 12195 7.44 149548 91.27 26506 16.18
400 450 425 6918 4.22 156466 95.49 14311 8.73
450 500 475 3813 2.33 160279 97.82 7393 4.51
500 550 525 2230 1.36 162509 99.18 3580 2.18
550 600 575 1350 0.82 163859 100.00 1350 0.82

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

Imagen 1. Mapa de las consumo energético en la Comunidad Autónoma de Aragón.

Gráficas

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

hist(demanda_energética, main = "Gráfica N°14.1.1.-Distribución de frecuencia del 
consumo energético de los edificios en la Comunidad Autónoma de Aragón",ylab="Cantidad",xlab="Consumo energético KWh/m2/año",
     col = "skyblue") 

hist(demanda_energética, main = "Gráfica N°14.1.2.-Distribución de frecuencia del
consumo energético  de los edificios en la Comunidad Autónoma de Aragón",ylab="Cantidad",xlab="Consumo energético KWh/m2/año",
     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°14.1.3.-Porcentaje del 
consumo energético  de los edificios en la Comunidad Autónoma de Aragón",ylab="Porcentaje (%)",xlab="Consumo energético KWh/m2/año",
        col = "red3",names.arg = TDFsimplificado$MC,axis.lty = 1,cex.names = 0.8)

barplot(TDFsimplificado$`hi (%)`, space = 0,main = "Gráfica N°14.1.4.-Porcentaje del 
consumo energético  de los edificios en la Comunidad Autónoma de Aragón",ylab="Porcentaje (%)",xlab="Consumo energético KWh/m2/año",
        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(demanda_energética, horizontal = T, col = "salmon", 
        main= "Gráfica N°14.1.5.-Distribución del consumo energético de los 
        edificios de la Comunidad Autónoma de Aragón", xlab="Consumo energético KWh/m2/año")

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="Consumo energético KWh/m2/año", main= "Gráfica N°14.1.6.-Distribución del consumo
     energético 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="Consumo energético KWh/m2/año", main= "Gráfica N°14.1.7.-Distribución del porcentaje del consumo energético
     , 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.

summary(demanda_energética)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    0.0   178.4   239.2   250.1   309.9   599.9 
mediana<-median(demanda_energética)
mediana
[1] 239.19
media_aritmetica<-mean(demanda_energética)
media_aritmetica
[1] 250.0995
desviación_estandar<-sd(demanda_energética)
desviación_estandar
[1] 103.4964
coeficiente_variabilidad <- (desviación_estandar/media_aritmetica) * 100 
coeficiente_variabilidad
[1] 41.38208
library(e1071)
Warning: package 'e1071' was built under R version 4.4.2
coeficiente_asimetria <- skewness(demanda_energética) 
coeficiente_asimetria
[1] 0.5543177
curtosis<-kurtosis(demanda_energética)
curtosis
[1] 0.3370404
# Identificar los valores atípicos 
outliers<-boxplot.stats(demanda_energética)$out
# Contar los valores atípicos 
num_outliers <- length(outliers) 
num_outliers
[1] 3196
minimooutliers<-min(outliers)
minimooutliers
[1] 507.17
max1<-caja$stats[1]
max1
[1] 0
mix2<-caja$stats[5]
mix2
[1] 507.12
maximooutliers<-max(outliers)
maximooutliers
[1] 599.88
Variable<-c("Demanda energética (KWh/m2*año)")


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

library(knitr)
kable(Tabla_indicadores, format = "markdown", caption = "Tabla 3. Indicadores estadíticos de la variable demanda energética")
Tabla 3. Indicadores estadíticos de la variable demanda energética
Variable x Me s Cv (%) As K minimo máximo
Demanda energética (KWh/m2*año) 250.1 239.19 103.5 41.38 0.55 0.34 0 599.88
Tabla_outliers<-data.frame(num_outliers,minimooutliers,maximooutliers)
colnames(Tabla_outliers)<-c("Outliers","minimo","máximo")

library(knitr)
kable(Tabla_outliers, format = "markdown", caption = "Tabla 4. Outliers de la variable demanda energética")
Tabla 4. Outliers de la variable demanda energética
Outliers minimo máximo
3196 507.17 599.88

Conclusiones

El consumo energético de los edificios de la Comunidad Autónoma de Aragón, fructua entre 0 (KWh/m2*año) a 599.9 (KWh/m2*año), los valores están en torno a 239.19 (KWh/m2*año) que tiene una desviación estándar de 103.5 (KWh/m2*año). El conjunto de datos es ligeramente heterogéneo con una acumulación de datos en los valores centrales de la variable levente sesgada a la derecha con una concentración medianamente de los datos. Además, presenta valores atípicos, con un total de 3196 valores que van desde 507.17 a 599.88. Por lo antes mencionado, el comportamiento de la variable es levemente prejudicial para el medioambiente porque, presenta valores con altos consumo energético aportando a la emisión de CO2.