#Librerire

options(repos = c(CRAN = "https://cran.mirror.garr.it/CRAN/"))
install.packages("e1071") # Per kurtosi e asimmetria 
## Installazione pacchetto in 'C:/Users/User/AppData/Local/R/win-library/4.4'
## (perché 'lib' non è specificato)
## pacchetto 'e1071' aperto con successo con controllo somme MD5
## 
## I pacchetti binari scaricati sono in
##  C:\Users\User\AppData\Local\Temp\RtmpuSxXM3\downloaded_packages
install.packages("moments")
## Installazione pacchetto in 'C:/Users/User/AppData/Local/R/win-library/4.4'
## (perché 'lib' non è specificato)
## pacchetto 'moments' aperto con successo con controllo somme MD5
## 
## I pacchetti binari scaricati sono in
##  C:\Users\User\AppData\Local\Temp\RtmpuSxXM3\downloaded_packages
install.packages("tidyverse")
## Installazione pacchetto in 'C:/Users/User/AppData/Local/R/win-library/4.4'
## (perché 'lib' non è specificato)
## pacchetto 'tidyverse' aperto con successo con controllo somme MD5
## 
## I pacchetti binari scaricati sono in
##  C:\Users\User\AppData\Local\Temp\RtmpuSxXM3\downloaded_packages
install.packages("dplyr") #per manipolare il dataframe
## Installazione pacchetto in 'C:/Users/User/AppData/Local/R/win-library/4.4'
## (perché 'lib' non è specificato)
## pacchetto 'dplyr' aperto con successo con controllo somme MD5
## 
## I pacchetti binari scaricati sono in
##  C:\Users\User\AppData\Local\Temp\RtmpuSxXM3\downloaded_packages
install.packages("kableExtra")
## Installazione pacchetto in 'C:/Users/User/AppData/Local/R/win-library/4.4'
## (perché 'lib' non è specificato)
## pacchetto 'kableExtra' aperto con successo con controllo somme MD5
## 
## I pacchetti binari scaricati sono in
##  C:\Users\User\AppData\Local\Temp\RtmpuSxXM3\downloaded_packages
install.packages("tidyr")
## Installazione pacchetto in 'C:/Users/User/AppData/Local/R/win-library/4.4'
## (perché 'lib' non è specificato)
## pacchetto 'tidyr' aperto con successo con controllo somme MD5
## 
## I pacchetti binari scaricati sono in
##  C:\Users\User\AppData\Local\Temp\RtmpuSxXM3\downloaded_packages
library(kableExtra)
## Warning: il pacchetto 'kableExtra' è stato creato con R versione 4.4.2
library(tidyverse)
## Warning: il pacchetto 'tidyverse' è stato creato con R versione 4.4.2
## Warning: il pacchetto 'ggplot2' è stato creato con R versione 4.4.2
## Warning: il pacchetto 'tidyr' è stato creato con R versione 4.4.2
## Warning: il pacchetto 'readr' è stato creato con R versione 4.4.2
## Warning: il pacchetto 'purrr' è stato creato con R versione 4.4.2
## Warning: il pacchetto 'dplyr' è stato creato con R versione 4.4.2
## Warning: il pacchetto 'forcats' è stato creato con R versione 4.4.2
## Warning: il pacchetto 'lubridate' è stato creato con R versione 4.4.2
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter()     masks stats::filter()
## ✖ dplyr::group_rows() masks kableExtra::group_rows()
## ✖ dplyr::lag()        masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
library(gghalves)
## Warning: il pacchetto 'gghalves' è stato creato con R versione 4.4.2
library(dplyr)
library(knitr)
## Warning: il pacchetto 'knitr' è stato creato con R versione 4.4.2
library(moments)
library(kableExtra)

L’azienda Texas Realty Insights desidera analizzare le tendenze del mercato immobiliare nello stato del Texas, sfruttando i dati storici relativi alle vendite di immobili.

L’obiettivo è fornire insight statistici e visivi che supportino le decisioni strategiche di vendita e ottimizzazione delle inserzioni immobiliari.

Dataset:

dati <- read.csv("C:/Users/User/Desktop/PROG_DESCRITTIVA/realestate_texas.csv")

##1. Analisi delle variabili

summary(dati)
##      city                year          month           sales      
##  Length:240         Min.   :2010   Min.   : 1.00   Min.   : 79.0  
##  Class :character   1st Qu.:2011   1st Qu.: 3.75   1st Qu.:127.0  
##  Mode  :character   Median :2012   Median : 6.50   Median :175.5  
##                     Mean   :2012   Mean   : 6.50   Mean   :192.3  
##                     3rd Qu.:2013   3rd Qu.: 9.25   3rd Qu.:247.0  
##                     Max.   :2014   Max.   :12.00   Max.   :423.0  
##      volume        median_price       listings    months_inventory
##  Min.   : 8.166   Min.   : 73800   Min.   : 743   Min.   : 3.400  
##  1st Qu.:17.660   1st Qu.:117300   1st Qu.:1026   1st Qu.: 7.800  
##  Median :27.062   Median :134500   Median :1618   Median : 8.950  
##  Mean   :31.005   Mean   :132665   Mean   :1738   Mean   : 9.193  
##  3rd Qu.:40.893   3rd Qu.:150050   3rd Qu.:2056   3rd Qu.:10.950  
##  Max.   :83.547   Max.   :180000   Max.   :3296   Max.   :14.900
str(dati)
## 'data.frame':    240 obs. of  8 variables:
##  $ city            : chr  "Beaumont" "Beaumont" "Beaumont" "Beaumont" ...
##  $ year            : int  2010 2010 2010 2010 2010 2010 2010 2010 2010 2010 ...
##  $ month           : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ sales           : int  83 108 182 200 202 189 164 174 124 150 ...
##  $ volume          : num  14.2 17.7 28.7 26.8 28.8 ...
##  $ median_price    : num  163800 138200 122400 123200 123100 ...
##  $ listings        : int  1533 1586 1689 1708 1771 1803 1857 1830 1829 1779 ...
##  $ months_inventory: num  9.5 10 10.6 10.6 10.9 11.1 11.7 11.6 11.7 11.5 ...
N<-dim(dati)[1] #numero di osservzaioni fatte
Variabile tipologia
City città di riferimento qualitativa nominale
Year anno di riferimento quantitativa continua
Month mese di riferimento qualitativa nominale
Sales numero totale di vendite quantitativa discreta
Volume valore totale delle vendite (in milioni di dollari) quantitativa continua
Median_price prezzo mediano di vendita (in dollari) quantitativa continua
Listings numero totale di annunci attivi quantitativa discreta
Month_inventory quantità di tempo necessaria per vendere tutte le inserzioni correnti, espresso in mesi quantitativa continua

definita la tipologia di variabile vado a calcolare: - per le variabili quantitative: indici di posizione, indici di forma (asimmetria e curtosi) e variabilità (devizione standard e variabilità); - per le variabili qualitative: distribzion di frequenza;

2. Indici di posizione, variabilità e forma

Variabili quanlitative:

  • citta’ : distribuzione di frequenza
ni_city <- table (dati$city)
fi_city <- table (dati$city)/N
Ni_city <- cumsum (ni_city)
Fi_city <- Ni_city/N
dist_freq_città <- cbind(ni_city, fi_city, Ni_city, Fi_city)
dist_freq_città
##                       ni_city fi_city Ni_city Fi_city
## Beaumont                   60    0.25      60    0.25
## Bryan-College Station      60    0.25     120    0.50
## Tyler                      60    0.25     180    0.75
## Wichita Falls              60    0.25     240    1.00
barplot(
  ni_city,
  main = "Ditribuzione della variabile città",
  col="red",
  xlab = "Città",
  ylab = "Frequenza"
  
)

  • Year: distribuzione di frequenza
ni_year <- table (dati$year)
fi_year <- table (dati$year)/N
Ni_year <- cumsum (ni_year)
Fi_year <- Ni_year/N
dist_freq_year <- cbind(ni_year, fi_year, Ni_year, Fi_year)
dist_freq_year
##      ni_year fi_year Ni_year Fi_year
## 2010      48     0.2      48     0.2
## 2011      48     0.2      96     0.4
## 2012      48     0.2     144     0.6
## 2013      48     0.2     192     0.8
## 2014      48     0.2     240     1.0
max_freq_year <- max(ni_year) +5 
barplot(
  ni_year,
  main = "Ditribuzione della variabile Year",
  col="red",
  xlab = "Year",
  ylab = "Frequenza",
  ylim = c(0,max_freq_year),
  las=1
  
)

  • Month : distribuzione di frequenza
ni_month <- table (dati$month)
fi_month <- table (dati$month)/N
Ni_month <- cumsum (ni_month)
Fi_month <- Ni_month/N
dist_freq_month <- cbind(ni_month, fi_month, Ni_month, Fi_month)
dist_freq_month
##    ni_month   fi_month Ni_month   Fi_month
## 1        20 0.08333333       20 0.08333333
## 2        20 0.08333333       40 0.16666667
## 3        20 0.08333333       60 0.25000000
## 4        20 0.08333333       80 0.33333333
## 5        20 0.08333333      100 0.41666667
## 6        20 0.08333333      120 0.50000000
## 7        20 0.08333333      140 0.58333333
## 8        20 0.08333333      160 0.66666667
## 9        20 0.08333333      180 0.75000000
## 10       20 0.08333333      200 0.83333333
## 11       20 0.08333333      220 0.91666667
## 12       20 0.08333333      240 1.00000000
max_freq_month <- max(ni_month) +5

barplot(
  ni_month,
  main = "Ditribuzione della variabile month",
  col="red",
  xlab = "month",
  ylab = "Frequenza",
  ylim = c(0,max_freq_month),
  las=1
  
)

Osservzioni su variabili qualitative:

- city: le osservazioni si distribuiscono in modo uniforme sulle quattro città oggetto di studio. Per ogni città lo studio riporta 60 osservazioni;

- year : le osservazioni si susseguono per ogni anno dal 2010 al 2024. Per ciascun anno lo studio riporta 48 osservazioni.

- month : le osservazioni si distribuiscono in modo uniforme per ciascuno dei 12 mesi di ciascin anno. Per ogni mese vengono riportate 20 oesservazioni.

La distribuzione di frequenza delle singole variabili quanlitative dimostra che le varie osservazioni sono state distribuite in modo uniforme nel corso dei 5 anni oggetto di studio, in modo da avere un andamento continui del mercato immobiliare del Texas.

Variabili quantitative:

Indici di Posizione

library(dplyr)
names(dati)
## [1] "city"             "year"             "month"            "sales"           
## [5] "volume"           "median_price"     "listings"         "months_inventory"
df_var_quantitative <- dati%>% select(sales, volume, median_price, listings, months_inventory)
  
summary(df_var_quantitative)
##      sales           volume        median_price       listings   
##  Min.   : 79.0   Min.   : 8.166   Min.   : 73800   Min.   : 743  
##  1st Qu.:127.0   1st Qu.:17.660   1st Qu.:117300   1st Qu.:1026  
##  Median :175.5   Median :27.062   Median :134500   Median :1618  
##  Mean   :192.3   Mean   :31.005   Mean   :132665   Mean   :1738  
##  3rd Qu.:247.0   3rd Qu.:40.893   3rd Qu.:150050   3rd Qu.:2056  
##  Max.   :423.0   Max.   :83.547   Max.   :180000   Max.   :3296  
##  months_inventory
##  Min.   : 3.400  
##  1st Qu.: 7.800  
##  Median : 8.950  
##  Mean   : 9.193  
##  3rd Qu.:10.950  
##  Max.   :14.900

Indici di Forma: Curtosi e asimmetria

attach(dati)
stats <- function(x) {

  skewness <- function(x) {
    mu <- mean(x)
    sigma <- sd(x)
    n <- length(x)
    return(sum((x - mu)^3) / (n * sigma^3))
  }
  kurtosis <- function(x) {
    mu <- mean(x)
    sigma <- sd(x)
    n <- length(x)
    m4_value <- sum((x - mu)^4) / n
    return(m4_value / sigma^4 - 3)
  }
  return(list(
    Asimmetria = round(skewness(x), 2),
    Curtosi = round(kurtosis(x), 2)
  ))
}

selected_columns<-c("sales", "volume","median_price","listings","months_inventory")
results_list <- list()         #raccolta dati


for (col in selected_columns) {
  stats_result <- stats(dati[[col]])  
  results_list[[col]] <- unlist(stats_result)  # Salva i risultati in un vettore.
}

# Trasformare in dataframe
results_df <- as.data.frame(results_list)  # ogni colonna rappresenta una variabile
results_df$Statistiche <- rownames(results_df)  # aggiunge le statistiche come colonna
rownames(results_df) <- NULL  # Rimuove i nomi delle righe

#definizione tabella
results_df <- results_df[, c(ncol(results_df), 1:(ncol(results_df) - 1))]

results_df %>%
  kable(format = "html", digits = 2, align = "c") %>%  
  kable_styling(full_width = FALSE, position = "center", bootstrap_options = c("striped", "hover")) %>%
  column_spec(2:ncol(results_df), width = "150px")
Statistiche sales volume median_price listings months_inventory
Asimmetria 0.71 0.88 -0.36 0.65 0.04
Curtosi -0.34 0.15 -0.64 -0.81 -0.20

COMMENTO:

  • sales: asimmetria: distribuzione asimmetrica positiva, quindi tendente a dx. kurtosi: Distribuzione leggermente platicurtica, con code meno pronunciate.

  • volume: asimmetria: distribuzione asimmetrica positiva , maggiore della precedente con valori alti. kurtosi: distribuzione simile alla normale;

  • median_price: asimmetria:distribuzione asimmetrica negativa, indica la presenza di valori maggiori in corrispondenza della fascia alta prezzi; kurtosi: distribuzione platicurtica;

  • listings: asimmetria: distribuzione asimmetrica positiva, quindi tendente a dx quindi presenti valori alti; kurtosi : distribuzione platicurtica;

  • months_inventory: simmetrica. asimmetria: distribuzione simmetrica; kurtosi : distribuzione platicurtica, di poco.

Indici di Variabilità : SD,CV,R,IQR,VAR

Coefficiente di Variazione:

install.packages("kableExtra")
## Warning: il pacchetto 'kableExtra' è in uso e non sarà installato
library(dplyr)
library(kableExtra)

cv <- function(x) {
    return(sd(x) / mean(x) * 100)
}

sd_values_cv <- data.frame(
  Variabile = c("Sales", "Volume", "Median_Price", "Listings", "Months_Inventory"),
  C_Variazione= c(cv(dati$sales),
                          cv(dati$volume),
                          cv(dati$median_price),
                          cv(dati$listings),
                          cv(dati$months_inventory))

)

# Arrotondamento a due cifre decimali
sd_values_cv$C_Variazione <- round(sd_values_cv$C_Variazione, 2)

# Visualizzazione della tabella di variabilità
kableExtra:: kable(sd_values_cv, caption = "Incidi di variabilità - Coefficiente di Variazione") %>%
  kable_styling(latex_options = c("hold_position"))
Incidi di variabilità - Coefficiente di Variazione
Variabile C_Variazione
Sales 41.42
Volume 53.71
Median_Price 17.08
Listings 43.31
Months_Inventory 25.06
  • Deviazione Standard:
install.packages("kableExtra")
## Warning: il pacchetto 'kableExtra' è in uso e non sarà installato
library(dplyr)
library(kableExtra)

sd_values <- data.frame(
  Variabile = c("Sales", "Volume", "Median_Price", "Listings", "Months_Inventory"),
  Deviazione_Standard = c(sd(dati$sales),
                          sd(dati$volume),
                          sd(dati$median_price),
                          sd(dati$listings),
                          sd(dati$months_inventory))

)

# Arrotondamento a due cifre decimali
sd_values$Deviazione_Standard <- round(sd_values$Deviazione_Standard, 2)

# Visualizzazione della tabella di variabilità
kableExtra:: kable(sd_values, caption = "Incidi di variabilità - Deviazione Standard per Variabile") %>%
  kable_styling(latex_options = c("hold_position"))
Incidi di variabilità - Deviazione Standard per Variabile
Variabile Deviazione_Standard
Sales 79.65
Volume 16.65
Median_Price 22662.15
Listings 752.71
Months_Inventory 2.30

In Sintesi:

stats <- function(x) {
  cv <- function(x) {
    return(sd(x) / mean(x) * 100)
  }
  
  
  return(list(
    
    DeviazioneStandard_DS = round(sd(x), 2),
    CoefficienteVariazione_CV = round(cv(x), 2),
    Range_R = round(max(x) - min(x), 2),
    IntervalloInterquartile_IQR= round(IQR(x), 2),
    Varianza_VAR = round(var(x), 2)
  
  ))
}

#prima riga: elenco delle variabili
selected_columns<-c("sales", "volume","median_price","listings","months_inventory")
results_list <- list() #risultati in lista

# Calcolo indici per variabile
for (col in selected_columns) {
  stats_result <- stats(dati[[col]])  
  results_list[[col]] <- unlist(stats_result) 
}

# lista da utilizzare nel dataframe
results_df <- as.data.frame(results_list)  
results_df$Statistiche <- rownames(results_df)  
rownames(results_df) <- NULL  # Rimuove i nomi delle righe

#prima colonna: elenco indici variabilità
results_df <- results_df[, c(ncol(results_df), 1:(ncol(results_df) - 1))]



results_df %>%
  kable(format = "html", digits = 2, align = "c") %>%  
  kable_styling(full_width = FALSE, position = "center", bootstrap_options = c("striped", "hover")) %>%
  column_spec(2:ncol(results_df), width = "150px")
Statistiche sales volume median_price listings months_inventory
DeviazioneStandard_DS 79.65 16.65 22662.15 752.71 2.30
CoefficienteVariazione_CV 41.42 53.71 17.08 43.31 25.06
Range_R 344.00 75.38 106200.00 2553.00 11.50
IntervalloInterquartile_IQR 120.00 23.23 32750.00 1029.50 3.15
Varianza_VAR 6344.30 277.27 513572983.09 566568.97 5.31

Da questi dati si deduce che:

Sales: Varibilità notevole, il Rage va di 344 , con una variazione del corpo centrale dei dati di 120 (IQR).

Volume: La variabilità dei dati è molto ampia, con un CV del 53%.

Median_price : La variabilità decisamente più bassa, passando al 17%. I valori indicano che i prezzi degli immoili non si allontanano molto dalla media.

Listing : Variabilità notevole, confemta dal Range importante e l’ampia differenza tra il terzo quartile ed il primo quartile (IQR). var= 43.31%

Month_inventory: i dati indicano che , in media, per poter vendere tutte le inserzioni correnti, sono necessari 11,5 mesi , con una varianza molto bassa.

3. Idenificazione delle variabili con maggiore variabilità e asimmetria

Dai dati raccolti all’interno delle tabelle ho potuto confrontare i vari risultati constatando che VOLUME (Valore totale delle vendite in milioni di dollari) e sia la variabile con maggiore VARIABILITA’(53.71%) sia la variabile più asimmetrica (0.88).

Questo dimostra che c’è un’ampia variabilità della distribuzione delle vendite, con periodi più vantaggiosi e periodi meno vantaggiosi. Quindi il mercato non di distribuisce in modo uniforme ed il valore elevato dell’asimmetria indica che ci sono dei numeri elevati che indicano che in determinate città o in determinati periodi le vendite sono mettamente maggiori.

Se le vendite fossero state uniformi o se fosse un mericato in merdita saremmo in una condizione normale, nel primo caso , o negativa, nel secodo caso.

4. Creazione di clasi per una variabile quantitativa

Dato che Variabile volume si è dimostrata essere così di rilievo nella valutazione dell’andamento del mercato immobiliare del Texas, continuo a studiarla:

#definisco gli estremi che contengono i valori

cat("Minimo =", min(volume), "\n")
## Minimo = 8.166
cat("Massimo =", max(volume), "\n")
## Massimo = 83.547
volume_intervals <- cut(volume,breaks = seq(from = 8, to = max(volume, na.rm = TRUE) + 1, by = 15),right = FALSE)

distr_freq <- function(x, n) {
  abs_freq <- table(x)
  rel_freq <- round(abs_freq / n, 2)
  freq_distr <- cbind(abs_freq, rel_freq)
  return(freq_distr) 
}

distr_freq_volume <- distr_freq(volume_intervals, N)
abs_freq<-distr_freq_volume[,"abs_freq"]
rel_freq<-distr_freq_volume[,"rel_freq"]

rel_cum<-cumsum(abs_freq)
abs_cum <- rel_cum/N

volume_distr <- cbind(
  round(distr_freq_volume, 2), 
  rel_cum = round(rel_cum, 2), 
  abs_cum = round(abs_cum, 2)  
)



volume_distr<-as.data.frame(volume_distr)
volume_distr$Volume<-row.names(volume_distr)
row.names(volume_distr)<-NULL

volume_distr<-volume_distr[,c(ncol(volume_distr), 1: ncol(volume_distr) -1)]

volume_distr %>%
  kable(format="html", digits=2, align = "c")%>%
  kable_styling(full_width = FALSE, position="center", bootstrap_options = c("striped", "hover")) %>%
  column_spec(2:ncol(volume_distr), width = "50px")
Volume abs_freq rel_freq rel_cum abs_cum
[8,23) 92 0.38 92 0.38
[23,38) 79 0.33 171 0.71
[38,53) 43 0.18 214 0.89
[53,68) 17 0.07 231 0.96
[68,83) 8 0.03 239 1.00
#Grafico

volume_intervals <- na.omit(volume_intervals)

ggplot(data = data.frame(volume_intervals), aes(x = volume_intervals)) +
  geom_bar(stat = "count", col = "black", fill = "red") +
  labs(title = "Distribuzione del valore totale delle vendite nel mercato immobiliare del Texas",
       x = "Valore totale delle vendite per classe (mln $)",
       y = "Frequenze assolute") +
  theme_bw()

Indice dell’indice di eterogeneità di Gini :

indice_gini<-function(x){
  fi= table(x)/length(x)
  J= length(table(x))
  G = 1-sum(fi^2)
  return(G/((J-1)/J))
}
indice_gini(volume_intervals) 
## [1] 0.8800179

L’indice di Gini permette di misurate la variabilità utilizzata per descrivere la distribuzione della variabile Volume. essendo di 0.8800179 , quindi vicino ad 1, l’eterogeneità è massima, la variabile non è distribuita equamente ed è concentrata, come mostra il grafico, nelle classi più basse. Ciò vuol dire che c’è un maggior numero di vendite di immobili con un prezzo più basso, con vendite di immobili dai valori più alti meno frequanti.

Quindi la variabile, altamente variabile, spega come sia maggiore la vendita di immobili meno costori in Texas, ripetto a quelli più costosi. Questo potrebbe orientare gli imprenditori nel decidere quali immobili acquistare per poi vendere.

5. Calcolo delle probabilità

oss_Beaumont <- sum(dati$city == "Beaumont" ) #numero di osservazioni 
probabilità_Beaumont <- oss_Beaumont/N
oss_Luglio <- sum(dati$month == "7" ) #numero di ossevazioni 
probabilità_Luglio <- oss_Luglio/N
ni_year #numero di osservazioni per ciascun anno
## 
## 2010 2011 2012 2013 2014 
##   48   48   48   48   48
oss_dic_12 <- ni_year/12 
oss_dic_12
## 
## 2010 2011 2012 2013 2014 
##    4    4    4    4    4
prob_dic_12 <- oss_dic_12/N
prob_dic_12
## 
##       2010       2011       2012       2013       2014 
## 0.01666667 0.01666667 0.01666667 0.01666667 0.01666667

6. Creazione di nuove Variabili

dati$mean_price<- dati$volume*10^6/dati$sales
summary(dati)
##      city                year          month           sales      
##  Length:240         Min.   :2010   Min.   : 1.00   Min.   : 79.0  
##  Class :character   1st Qu.:2011   1st Qu.: 3.75   1st Qu.:127.0  
##  Mode  :character   Median :2012   Median : 6.50   Median :175.5  
##                     Mean   :2012   Mean   : 6.50   Mean   :192.3  
##                     3rd Qu.:2013   3rd Qu.: 9.25   3rd Qu.:247.0  
##                     Max.   :2014   Max.   :12.00   Max.   :423.0  
##      volume        median_price       listings    months_inventory
##  Min.   : 8.166   Min.   : 73800   Min.   : 743   Min.   : 3.400  
##  1st Qu.:17.660   1st Qu.:117300   1st Qu.:1026   1st Qu.: 7.800  
##  Median :27.062   Median :134500   Median :1618   Median : 8.950  
##  Mean   :31.005   Mean   :132665   Mean   :1738   Mean   : 9.193  
##  3rd Qu.:40.893   3rd Qu.:150050   3rd Qu.:2056   3rd Qu.:10.950  
##  Max.   :83.547   Max.   :180000   Max.   :3296   Max.   :14.900  
##    mean_price    
##  Min.   : 97010  
##  1st Qu.:132939  
##  Median :156588  
##  Mean   :154320  
##  3rd Qu.:173915  
##  Max.   :213234

In questo modo conosco il prezzo dell’immobile più economico ed il prezzo dell’immobile più costoso. La media dei costi di vendita di un immobile è 154.320 dollari.

-creare una colonna che misuri l’efficacia degli annunci di vendita: questo paramentro si può ottenere dividento il numero delle vendite effettuate(Sales) per la quantità di tempo necessaria per vendere tutte le inserzioni correnti (Months_inventory).

dati$efficacy_listings <- dati$sales/dati$months_inventory

summary(dati)
##      city                year          month           sales      
##  Length:240         Min.   :2010   Min.   : 1.00   Min.   : 79.0  
##  Class :character   1st Qu.:2011   1st Qu.: 3.75   1st Qu.:127.0  
##  Mode  :character   Median :2012   Median : 6.50   Median :175.5  
##                     Mean   :2012   Mean   : 6.50   Mean   :192.3  
##                     3rd Qu.:2013   3rd Qu.: 9.25   3rd Qu.:247.0  
##                     Max.   :2014   Max.   :12.00   Max.   :423.0  
##      volume        median_price       listings    months_inventory
##  Min.   : 8.166   Min.   : 73800   Min.   : 743   Min.   : 3.400  
##  1st Qu.:17.660   1st Qu.:117300   1st Qu.:1026   1st Qu.: 7.800  
##  Median :27.062   Median :134500   Median :1618   Median : 8.950  
##  Mean   :31.005   Mean   :132665   Mean   :1738   Mean   : 9.193  
##  3rd Qu.:40.893   3rd Qu.:150050   3rd Qu.:2056   3rd Qu.:10.950  
##  Max.   :83.547   Max.   :180000   Max.   :3296   Max.   :14.900  
##    mean_price     efficacy_listings
##  Min.   : 97010   Min.   : 8.737   
##  1st Qu.:132939   1st Qu.:14.165   
##  Median :156588   Median :18.477   
##  Mean   :154320   Mean   :22.457   
##  3rd Qu.:173915   3rd Qu.:26.424   
##  Max.   :213234   Max.   :98.293

Ci si sposta da un minimo di 8 immobili venduti al mese ad un massimo di 98. La media è di 22 immobili venduti per mese, lontano da numero max. Analizzando l’asimmetria della distribuzione

attach(dati)
## I seguenti oggetti sono mascherati da dati (pos = 3):
## 
##     city, listings, median_price, month, months_inventory, sales,
##     volume, year
curtosi_efficacy_listings    <- kurtosis(dati$efficacy_listings)-3
asimmetria_efficacy_listings <- skewness(dati$efficacy_listings)

print(curtosi_efficacy_listings)
## [1] 7.763269
print(asimmetria_efficacy_listings)
## [1] 2.433237

7. Analisi Condizionata

# Calcolo delle statistiche per città
city_summary <- dati %>%
  group_by(city) %>%
  summarise(
    mean_sales = mean(sales),
    sd_sales = sd(sales),
    mean_volume = mean(volume),
    sd_volume = sd(volume),
    mean_median_price = mean(median_price),
    sd_median_price = sd(median_price),
    mean_efficacy_listings = mean(efficacy_listings),
    sd_efficacy_listings = sd(efficacy_listings)
  )

# Arrotondamento
city_summary <- city_summary %>%
  mutate(across(where(is.numeric), ~ round(., 2)))

# Risultati
kable(city_summary, caption = "Statistiche Riassuntive per Città") %>%
  kable_styling(latex_options = c("hold_position"))
Statistiche Riassuntive per Città
city mean_sales sd_sales mean_volume sd_volume mean_median_price sd_median_price mean_efficacy_listings sd_efficacy_listings
Beaumont 177.38 41.48 26.13 6.97 129988.3 10104.99 18.72 6.90
Bryan-College Station 205.97 84.98 38.19 17.25 157488.3 8852.24 31.18 20.26
Tyler 269.75 61.96 45.77 13.11 141441.7 9336.54 24.95 8.91
Wichita Falls 116.07 22.15 13.93 3.24 101743.3 11320.03 14.98 3.25
#Grafico risultati
ggplot(data = city_summary, aes(x = city, y = mean_efficacy_listings)) +
  geom_bar(stat = "identity", color="black",fill="lightblue") +
  geom_errorbar(aes(ymin = mean_efficacy_listings - sd_efficacy_listings, 
                    ymax = mean_efficacy_listings + sd_efficacy_listings),
                width = 0.2, color = "black") + 
  labs(title = "Efficacia media degli annunci per città", 
       x = "Città", 
       y = "Efficacia annunci") +
  coord_cartesian(ylim = c(0, 50)) +
  theme_bw() +
  theme(legend.position = "none")

Nella città Bryan-Colleg station gli annunci hanno una maggiore efficacia.

-Calcolo delle statistiche per Year

year_summary <- dati %>%
  group_by(year) %>%
  summarise(
    mean_sales = mean(sales),
    sd_sales = sd(sales),
    mean_volume = mean(volume),
    sd_volume = sd(volume),
    mean_median_price = mean(median_price),
    sd_median_price = sd(median_price),
    mean_efficacy_listings = mean(efficacy_listings),
    sd_efficacy_listings = sd(efficacy_listings)
  )

# Arrotondamento
year_summary <- year_summary %>%
  mutate(across(where(is.numeric), ~ round(., 2)))

#Risultati
kable(year_summary, caption = "Statistiche Riassuntive per Anno") %>%
  kable_styling(latex_options = c("hold_position"))
Statistiche Riassuntive per Anno
year mean_sales sd_sales mean_volume sd_volume mean_median_price sd_median_price mean_efficacy_listings sd_efficacy_listings
2010 168.67 60.54 25.68 10.80 130191.7 21821.76 16.95 5.36
2011 164.12 63.87 25.16 12.20 127854.2 21317.80 14.73 3.87
2012 186.15 70.91 29.27 14.52 130077.1 21431.52 18.65 5.94
2013 211.92 84.00 35.15 17.93 135722.9 21708.08 26.51 11.27
2014 230.60 95.51 39.77 21.19 139481.2 25625.41 35.45 19.50
#Grafico Risultati
ggplot(data = year_summary, aes(x = year, y = mean_efficacy_listings)) +
  geom_bar(stat = "identity", color="black",fill="lightblue") +
  geom_errorbar(aes(ymin = mean_efficacy_listings - sd_efficacy_listings, 
                    ymax = mean_efficacy_listings + sd_efficacy_listings),
                width = 0.2, color = "black") + 
  labs(title = "Efficacia media degli annunci per città", 
       x = "Anno", 
       y = "Efficacia annunci") +
  coord_cartesian(ylim = c(0, 50)) +
  theme_bw() +
  theme(legend.position = "none")

Nell’anno 2014 gli annunci hanno una maggior effiacia.

# Calcolo delle statistiche per mese
month_summary <- dati %>%
  group_by(month) %>%
  summarise(
    mean_sales = mean(sales),
    sd_sales = sd(sales),
    mean_volume = mean(volume),
    sd_volume = sd(volume),
    mean_median_price = mean(median_price),
    sd_median_price = sd(median_price),
    mean_efficacy_listings = mean(efficacy_listings),
    sd_efficacy_listings = sd(efficacy_listings)
  )

# Arrotondamento
month_summary <- month_summary %>%
  mutate(across(where(is.numeric), ~ round(., 2)))

#Risultati
kable(month_summary, caption = "Statistiche Riassuntive per Mese") %>%
  kable_styling(latex_options = c("hold_position"))
Statistiche Riassuntive per Mese
month mean_sales sd_sales mean_volume sd_volume mean_median_price sd_median_price mean_efficacy_listings sd_efficacy_listings
1 127.40 43.38 19.00 8.37 124250 25151.28 14.87 5.68
2 140.85 51.07 21.65 10.09 130075 22822.59 15.95 6.35
3 189.45 59.18 29.38 12.02 127415 23442.03 21.03 9.33
4 211.70 65.40 33.30 14.52 131490 21458.40 22.97 10.66
5 238.85 83.12 39.70 19.02 134485 18796.26 26.60 14.40
6 243.55 95.00 41.30 21.08 137620 19231.02 27.37 17.15
7 235.75 96.27 39.12 21.41 134750 21944.78 27.68 20.65
8 231.45 79.23 38.01 18.05 136675 22488.38 27.10 15.39
9 182.35 72.52 29.60 15.22 134040 24344.10 21.49 11.14
10 179.90 74.95 29.08 15.13 133480 26358.07 21.78 12.02
11 156.85 55.47 24.81 11.15 134305 24691.47 19.66 9.79
12 169.40 60.75 27.09 12.57 133400 22809.76 22.99 12.93
#Grafico Risultati
ggplot(data = month_summary, aes(x = month, y = mean_efficacy_listings)) +
  geom_bar(stat = "identity", color="black",fill="lightblue") +
  geom_errorbar(aes(ymin = mean_efficacy_listings - sd_efficacy_listings, 
                    ymax = mean_efficacy_listings + sd_efficacy_listings),
                width = 0.2, color = "black") + 
  labs(title = "Efficacia media annunci degli annunci per mese", 
       x = "Mese", 
       y = "Efficacia annunci") +
 coord_cartesian(ylim = c(0, 50)) +
  theme_bw() +
  theme(legend.position = "none")

Nei mesi centrali centrali dell’anno, giugno e luglio, gli annunci hanno una maggiore efficacia.

Con queste analisi statistiche , a mio parere, conviene intenificare la pubblicizzazione degli annunci nel periodo estivo dove e persone , probabilmente, hanno maggiore libertà e quindi più probabilita di poter incappare in quale annuncio pubblicitario.

8. Creazioni di visualizzazioni con ggplot2

ggplot(data = dati, aes(x = city, y = median_price, fill = city)) +
  geom_boxplot() +
  labs(
    title = "condronto del prezzo medio degli immobili tra le città",
    x = "Città",
    y = "Prezzo mediano di vendita"
  ) +
  theme_bw() 

ggplot(data = dati, aes(x = factor(month), y = sales, fill = city)) +
  geom_bar(stat = "identity", position = "fill")  +    
  labs(
    title = "Distribuzione percentuale delle vendite per mese e città",
    x = "Mesi",
    y = "Percentuale di vendite"
  ) +
  scale_x_discrete(labels = c("Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic")) +
  theme_bw()

ggplot(dati, aes(x = year, y = sales, colour =  city)) +

  geom_smooth(method = , se = FALSE)+
  labs(title = "Andamento delle vendite per città in diversi periodi storici",
       x = "Anni",
       y = "Vendite")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'

9. CONCLUSIONI

L’analisi del mercato immobiliare del Texas analizza 240 osservazioni raccolte equamente tra le 4 città, nei 5 anni di osservazioni e nei 12 mesi di ciascun anno. Le osservazioni iniziano nel gennaio del 2010 e ternimano nel dicembre 2014.

Sono stati venduti 423 immobili con un volume di affari compreso tra gli 8.166 e gli 83.547 milioni di dollari.

Gli immobili più venduti hanno un costo che varia dai 97010 dollari e i 154320 dollari.

Il mercato immobiliare si basa molto sulla pubblicità mediante annunci che hanno un maggiore successo nei mesi estivi, dove il tempo necessario per vendere diminuisce, specialmente nella città di Brayan-College Station. Con il passare degli anni l’efficacia degli annunci è andata sempre più aumentando, trovando il suo picco nel 2014, ultimo anno di osservazioni.

Dalle analisi emerse consiglio l’emissione di annunci in funzione del periodo estivo, giugno e luglio nello specifico, dove probabilmente la possibile clientela ha una maggiore disponibilità di tempo e risorse.

Il campo è sicuramente florido. Nelle città di Tyler e Bryan-College Station l’andamento delle vendite, costantemente in aumento, da una maggiore affidabilità al mercato.

La città di Wikita Falls mantiene un andamento costante nel tempo ma basso. Questo dato, molto probabilmente, dipende dal fatto che la città non ha visto un rapido aumento della popolazione, come altre città texane, e la comunità si era consolidata come un mix di famiglie tradizionali, veterani e studenti. Ciò ha reso la città poco allettante, anche per il suo aspetto un pò vintage e la siccità di quegli anni.

Nonostante ciò , data la sua ricchezza paesagistica, storica ed industriale, fortificherei il mercato in funzione degli anni a venire.