file.exists("~/INGENIERÍA AMBIENTAL/Semestre 3/Estadística y Probabilidad/Proyecto Eficiencia Energética Aragón/1.Datos")[1] TRUE
Estadística Inferencial
file.exists("~/INGENIERÍA AMBIENTAL/Semestre 3/Estadística y Probabilidad/Proyecto Eficiencia Energética Aragón/1.Datos")[1] TRUE
Variable cuantitativa continua
Valor medible de la cantidad del compuesto gaseoso CO2, liberado a la atmósfera terrestre.
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_140 <- data.frame(subset(datos, Emision_CO2 <110, select = c(Emision_CO2)))
CO2<-CO2_140$Emision_CO2Verificamos el nuevo tamaño muestral
n<-length(CO2)
n[1] 160060
Ahora, pasamos de la muestra a la población por medio de modelos de probabilidad, como punto inicial se realiza la conjetura del modelo. A simple vista, se puede decir que, la distribución de la variable sigue un comportamiento normal, por lo tanto, creamos el modelo y lo sobreponemos al histograma:
n<-length(CO2)
n[1] 160060
histograma<-hist(CO2,freq = FALSE,main="Gráfica 1.Modelo de probabilidad normal de emisiones
de CO2 de los edificios en Áragon",
xlab="Emisiones de CO2 (kg)",ylab="Densidad de probabilidad",col="salmon")Conjeturamos el modelo
histograma<-hist(CO2,freq = FALSE,main="Gráfica 1.1.Modelo de probabilidad normal de emisiones
de CO2 de los edificios en Áragon",
xlab="Emisiones de CO2 (kg)",ylab="Densidad de probabilidad",col="salmon")
h<-length(histograma$counts)
u<-mean(CO2)
sigma<-sd(CO2)
x<-seq(min(CO2),max(CO2),0.01)
curve(dnorm(x,u,sigma),type="l",add=TRUE,lwd=4,col="blue3")Entonces, se observa un buen modelo, para comprobar la correlación entre la frecuencia observada (muestra) y la frecuencia esperada (población), se realizan los test de Pearson y de Chi-cuadrado que son muy eficaces al momento de evaluar un modelo.
#Frecuencia simple observada
Fo<-histograma$counts
Fo [1] 591 1075 2354 3600 5974 9072 11924 14591 15790 15705 15256 14045
[13] 11510 10197 7550 6143 4043 3375 2410 1992 1554 1309
P<-c(0)
for (i in 1:h)
{P[i] <-(pnorm(histograma$breaks[i+1],u,sigma)-
pnorm(histograma$breaks[i],u,sigma))}
Fe<-P*length(CO2)Una forma rápida de ver la eficasia del modelo, es comparar el valor del tamaño muestral real y el tamaño muestral obtenido del modelo.
sum(Fe)[1] 158786
n[1] 160060
Mide el grado de correlación entre la frecuencia observada y la frecuencia esperada.
plot(Fo,Fe,main="Gráfica 1.2.Correlación de frecuencias en el modelo normal
de superficie",xlab="Frecuencia Observada",ylab="Frecuencia esperada",col="blue3")Correlación<-cor(Fo,Fe)*100
Correlación[1] 97.9921
El test de Chi-Cuadrado utiliza dos parámetros: grados de libertad (se refiere al número de valores libres de variar dentro de intervalos de la variable, (k-1), y nivel de significancia (probabilidad de cometer un error, valores de 0.05,0.1,0.15)
Para validar el modelo, se compara el valor de chi-cuadrado calculado con el umbral de aceptación de chi-cuadrado correspondiente a los grados de libertad y el nivel de significancia deseado.
Si el valor de chi-cuadrado calculado es mayor que el umbral de aceptación, se rechaza el modelo, indicando que hay una diferencia significativa.
#Grados de libertad
grados_libertad <- length(histograma$counts)-1
grados_libertad[1] 21
# Nivel de significancia
nivel_significancia <- 0.05
#Frecuencia Observada porcentual
Fo<-(histograma$counts/n)*100
Fo [1] 0.3692365 0.6716231 1.4706985 2.2491566 3.7323504 5.6678745 7.4497064
[8] 9.1159565 9.8650506 9.8119455 9.5314257 8.7748344 7.1910534 6.3707360
[15] 4.7169811 3.8379358 2.5259278 2.1085843 1.5056854 1.2445333 0.9708859
[22] 0.8178183
sum(Fo)[1] 100
#Frecuencia esperada
Fe<-P*100
Fe [1] 0.5614238 0.9768094 1.6010700 2.4722517 3.5963110 4.9283812 6.3625918
[8] 7.7383214 8.8663025 9.5702109 9.7315882 9.3224313 8.4131356 7.1526954
[15] 5.7288123 4.3225726 3.0725760 2.0575260 1.2979862 0.7713945 0.4318812
[22] 0.2277891
sum(Fe)[1] 99.20406
x2<-sum((Fe-Fo)^2/Fe)
x2[1] 4.012919
# Calcular el umbral de aceptación
umbral_aceptacion <- qchisq(1 - nivel_significancia, grados_libertad)
umbral_aceptacion[1] 32.67057
x2<umbral_aceptacion[1] TRUE
Variable<-c("Emisiones de CO2")
tabla_resumen<-data.frame(Variable,round(Correlación,2),round(x2,2),round(umbral_aceptacion,2))
colnames(tabla_resumen)<-c("Variable","Test Pearson (%)","Chi Cuadrado","Umbral de aceptación")
library(knitr)Warning: package 'knitr' was built under R version 4.4.2
kable(tabla_resumen, format = "markdown", caption = "Tabla 1.Resumen de test de bondad al modelo de probabilidad")| Variable | Test Pearson (%) | Chi Cuadrado | Umbral de aceptación |
|---|---|---|---|
| Emisiones de CO2 | 97.99 | 4.01 | 32.67 |
¿Cuál es la probabilidad de que, al seleccionar cualquier edificio de Aragón, este tenga una Emisión de CO2 entre 90.8 (Kg) y 109.59 (Kg)?
Tomar en cuenta que la muestra está en el rango de 2.30 y 110 Kg de CO2
probabilidad_120.59_139.8<-pnorm(109.59,u,sigma)-
pnorm(90.8,u,sigma)
probabilidad_120.59_139.8*100[1] 2.463413
plot(x, dnorm(x, u,sigma), col = "skyblue3", lwd = 1, xlim = c(0,110),main="Gráfica 1.3. Cálculo de probabilidades",ylab="Densidad de probabilidad",xlab="Emisiones de CO2", xaxt="n")
# Definir el rango de la sección que quieres pintar
x_section <- seq(90.8,109.59, 0.001)
y_section <- dnorm(x_section, u,sigma)
# Pintar la sección de la curva
lines(x_section, y_section, col = "red", lwd = 2)
# Pintar el área debajo de la línea roja
polygon(c(x_section, rev(x_section)), c(y_section, rep(0, length(y_section))), col = rgb(1, 0, 0, 0.6))
# Añadir leyenda
legend("topright", legend = c("Modelo", "Área de Probabilidad"), col = c("skyblue3", "red"), lwd = 2, pch = c(NA, 15))
# Ajustar la escala del eje x a intervalos de 10
axis(1, at = seq(0, 110, by = 10), labels = seq(0, 110, by = 10), las = 2)El teorema de límite central nos indica que, aunque las variables individuales no sigan una distribución normal, la distribución de las medias aritméticas de n conjuntos muestrales, es normal, y por lo tanto, podemos obtener la media poblacional mediante intervalos de confianza, con tres postulados principales:
Donde, x es la media aritmética muestral y e es el margen de error (desviación estándar poblacional)
x<-mean(CO2)
x[1] 51.40107
sigma<-sd(CO2)
sigma[1] 20.41673
#P(x-2e<u<x+2e)=95%
e<-sigma/sqrt(n)
e[1] 0.05103226
li<-x-2*e
li[1] 51.299
ls<-x+2*e
ls[1] 51.50313
tabla_media<-data.frame(round(li,2),Variable,round(ls,2),e)
colnames(tabla_media)<-c("Limite superior","Media poblacional","Límite superior", "Desviación estándar poblacional")
library(knitr)
kable(tabla_media, format = "markdown", caption = "Tabla 2. Media poblacional")| Limite superior | Media poblacional | Límite superior | Desviación estándar poblacional |
|---|---|---|---|
| 51.3 | Emisiones de CO2 | 51.5 | 0.0510323 |
La variable Emisiones de CO2 sigue un modelo de probabilidad normal aprobando los test de Pearson y Chi-Cuadrado, de esta manera, logramos calcular probabilidades, como por ejemplo, que al seleccionar aleatoriamente un edificio en la Comunidad Autónoma de Aragón la probabilidad de que su emisión este entre 90.8 (Kg) y 109.59 (Kg) de CO2 es del 2.46%, y, mediante el teorema de límite central, sabemos que, su media aritmética poblacional se encuentra entre 51.3 (Kg) y 51.5 (Kg) de CO2 con una confianza del 95%.