Eficiencia energética de los edificios en Aragón

Modelos de regresión

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 en función del Consumo Energético

Regresión simple lineal

Ahora conoceremos la correlación existente entre una variable y otra mediante modelos de regresión.

Estadística bivariable

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

datos <- data.frame(subset(datos,Demanda_energética <= 1000&Demanda_energética > 100&Emision_CO2 <= 10000, select = c(Demanda_energética,Emision_CO2)))
str(datos)
'data.frame':   158740 obs. of  2 variables:
 $ Demanda_energética: num  142 174 188 409 259 ...
 $ Emision_CO2       : num  30.1 46.1 39.2 103.8 66.9 ...

Depuración realizamos la depuración de los datos para poder observar el conportamiento de las variables en cierto intervalo y poder conjeturar el modelo. En este caso, solo tomamos los valores enteros de la variable demanda energética y tomamos la media de la variable dependiente para cada valor de la variable independiente. En el último paso, para que se vea de mejor manera la relación de la nube de puntos con el modelo, escogemos un número dado de filas de manera aleatoria para evitar la acumulación de puntos en una sola zona.

# Filtrar para que solo queden valores enteros en la variable independiente
library(dplyr)
Warning: package 'dplyr' was built under R version 4.4.2

Adjuntando el paquete: 'dplyr'
The following objects are masked from 'package:stats':

    filter, lag
The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union
nuevo <- datos %>% 
  filter(Demanda_energética == as.integer(Demanda_energética))

######################## Obtener la mediana de Emision_CO2 por Demanda_energética #####################################
# Instalar y cargar el paquete dplyr

library(dplyr)

# Usar dplyr para obtener la mediana de la variable dependiente para cada valor de la variable independiente
datos_mediana <- datos %>%
  group_by(Demanda_energética) %>%
  summarise(Emision_CO2_mediana = mean(Emision_CO2, na.rm = TRUE))

# Filtrar los datos para que Demanda_energética sea un valor entero y obtener las medianas
datos_mediana <- datos_mediana %>% 
  filter(Demanda_energética == as.integer(Demanda_energética))

# Filtrar los datos para la gráfica
nuevo_mediana <- data.frame(subset(datos_mediana, Demanda_energética <= 500 & Demanda_energética >= 0 & Emision_CO2_mediana <= 300 & Emision_CO2_mediana >= 0, select = c(Demanda_energética, Emision_CO2_mediana)))
str(nuevo_mediana)
'data.frame':   390 obs. of  2 variables:
 $ Demanda_energética : num  101 102 103 104 105 106 107 108 109 110 ...
 $ Emision_CO2_mediana: num  20.4 22.7 21.4 20.8 22.6 ...
# Supongamos que tienes un data frame llamado 'datos' y quieres seleccionar 100 filas de manera aleatoria
set.seed(123) # Fijar la semilla para reproducibilidad
nuevo <- nuevo_mediana[sample(nrow(nuevo_mediana), 200), ]

Verificamos los nuevos intervalos y el tamaño muestral

min<-min(nuevo$Demanda_energética)
max<-max(nuevo$Demanda_energética)
miny<-min(nuevo$Emision_CO2_mediana)
maxy<-max(nuevo$Emision_CO2_mediana)
n<-length(nuevo$Demanda_energética)
tabla_intervalos<-data.frame(min,max,miny,maxy,n)
colnames(tabla_intervalos)<-c("Min. X","Máx. X","Min. Y","Máx.Y","Tamaño muestral")

library(knitr)
Warning: package 'knitr' was built under R version 4.4.2
kable(tabla_intervalos, format = "markdown", caption = "Tabla 1. Resumen de depuración")
Tabla 1. Resumen de depuración
Min. X Máx. X Min. Y Máx.Y Tamaño muestral
104 499 20.778 110.4943 200

1) Identificamos la variable dependiente y la independiente y relizamos diagrama de disperción.

y <- nuevo$Emision_CO2_mediana
x <- nuevo$Demanda_energética

plot(x,y, main="Gráfica 3.1. Emisiones de CO2 (Kg) en función del
     consumo energético",
     xlab = "Consumo energético (KWh/m2*año)", ylab="Emisión de CO2 (Kg)", col="salmon")

2)Conjeturamos el modelo de regresión en este caso parece ser de tipo lineal, asi que realizamos la regresión para obtener los coeficiente de la ecuación de tipo:

y=ax+b

regresionlineal <- lm(y~x)
regresionlineal

Call:
lm(formula = y ~ x)

Coefficients:
(Intercept)            x  
     7.4020       0.1806  
#Resumen del modelo de regresión lineal 
summary(regresionlineal)

Call:
lm(formula = y ~ x)

Residuals:
    Min      1Q  Median      3Q     Max 
-54.608  -2.581  -0.534   2.493  32.572 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 7.402003   1.468870   5.039 1.05e-06 ***
x           0.180580   0.004622  39.069  < 2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 7.423 on 198 degrees of freedom
Multiple R-squared:  0.8852,    Adjusted R-squared:  0.8846 
F-statistic:  1526 on 1 and 198 DF,  p-value: < 2.2e-16
plot(x,y, main="Gráfica 3.1. Emisiones de CO2 (Kg) en función del
     consumo energético",
     xlab = "Consumo energético (KWh/m2*año)", ylab="Emisión de CO2 (Kg)", col="salmon")
#Agregar recta de regresión
abline(regresionlineal,col="blue3", add=TRUE)
Warning in int_abline(a = a, b = b, h = h, v = v, untf = untf, ...): "add" es
un parámetro gráfico inválido

3) Test de Pearson y coeficiente de determinación

Ahora debemos saber la correlación entre las variables de manera lineal:

r <- cor(x,y)*100  
r
[1] 94.08393
#########               Coeficiente de determinacion
r2 <- ((r/100)^2)*100  
r2
[1] 88.51787

Tabla de resumen

Variables<-c("Consumo Energético","Emisión de CO2")
Unidades<-c("KWh/m2*año","Kg")
Tipo<-c("Independiente","Dependiente")
Test<-c(" ",round(r,2))
Correlación<-c(" ",round(r2,2))
Tabla_resumen<-data.frame(Variables,Unidades,Tipo,Test,Correlación)

library(knitr)
kable(Tabla_resumen, format = "markdown", caption = "Tabla de resumen")
Tabla de resumen
Variables Unidades Tipo Test Correlación
Consumo Energético KWh/m2*año Independiente
Emisión de CO2 Kg Dependiente 94.08 88.52

4)Restricciones: en este tipo de variables, el dominio de ambas es todos los reales positivos unidos al cero, y no existe valor de la variable independiente que me genere un valor de mi variable dependiente fuera de su dominio.

Restricciones = 0

5) Estimaciones: obtenemos la ecuación de la regresión por medio de los coeficientes y calculamos estimaciones.

b<- regresionlineal$coefficients[1]
b
(Intercept) 
   7.402003 
m<- regresionlineal$coefficients[2]
m
      x 
0.18058 

La ecuación de la regresión es:

y=0.18*x+7.40

  • ¿CUÁL SERÁ LA EMISIÓN DE CO2 (Kg) DE UN EDICIFIO QUE TIENE UN CONSUMO ENERGÉTICO DE 567.34 (KWh/m2*año)?
y<-m*567.34+b
y
       x 
109.8523 

Conclusiones

Entre el consumo energético en (KWh/m2*año) y las Emisiones de CO2 en (Kg) existe una relación de tipo lineal, y su ecuacion es y=0.18*x+7.40, donde Emisiones de CO2 depende de un 88,52% del consumo energético y el restante se debe a otros factores, no se presenta restricciones y, por ejemplo, si tenemos un consumo energético de 567.34 KWh/m2*año, tenemos una emisión de CO2 de 109.85 Kg.