1. Analisi delle variabili

La variabile “city” è una variabile qualitativa su scala nominale,mentre tutte le altre sono variabili quantitative. In particolare, sono tutte variabili discrete, a parte “months_inventory”, che è continua.

Le variabili “city”, “year” e “month” sono variabili che vengono utilizzate principalmente come dimensioni di raggruppamento e temporali per l’analisi delle altre variabili. Nello specifico, le città sono sottoinsiemi di interesse in corrispondenza dei quali suddividere i dati, mentre anni e mesi danno un’idea dell’evoluzione temporale.

Per tutte le altre variabili è possibile calcolare indici di posizione, di variabilità e forma. Tra gli indici di variabilità, l’indice di Gini può essere valutato rispetto alla distribuzione rispetto alla variabile “city” o in base a delle classi create ad hoc a partire dalle altre già presenti.

L’evoluzione temporale si può rappresentare tramite una line chart, come faremo per l’andamento delle vendite. Se, però, si vuole porre l’accento sul confronto tra le varie città, può essere una buona idea sfruttare i grafici a barre. Ovviamente la distribuzione dei valori di una determinata variabile sarà raffigurata tramite boxplot.

2. Indici di posizione, variabilità e forma

Indici di posizione

texas <- read.csv('realestate_texas.csv', sep = ',') 
attach(texas)
variables <- texas[, c("sales", "volume", "median_price",
                                         "listings", "months_inventory")]

ind.pos <- data.frame(
  Min = sapply(sapply(variables, min), round, digits=2),
  Primo_Quart = sapply(sapply(variables, quantile, probs=0.25), round, digits=2),
  Mediana = sapply(sapply(variables, median), round, digits=2),
  Media = sapply(sapply(variables, mean), round, digits=2),
  Terzo_Quart = sapply(sapply(variables, quantile, probs=0.75), round, digits=2),
  Max = sapply(sapply(variables, max), round, digits=2)
)

knitr::kable(ind.pos)
Min Primo_Quart Mediana Media Terzo_Quart Max
sales 79.00 127.00 175.50 192.29 247.00 423.00
volume 8.17 17.66 27.06 31.01 40.89 83.55
median_price 73800.00 117300.00 134500.00 132665.42 150050.00 180000.00
listings 743.00 1026.50 1618.50 1738.02 2056.00 3296.00
months_inventory 3.40 7.80 8.95 9.19 10.95 14.90

Indici di variabilità

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

ind.var <- data.frame(
  Deviazione_standard = sapply(sapply(variables, sd),round, digits=2),
  Coeff.variazione = sapply(sapply(variables, CV),round, digits=2)
)

knitr::kable(ind.var)
Deviazione_standard Coeff.variazione
sales 79.65 41.42
volume 16.65 53.71
median_price 22662.15 17.08
listings 752.71 43.31
months_inventory 2.30 25.06

Indici di Forma

library(moments)

correct_kurt <- function(x){
  return(kurtosis(x)-3)
}

ind.for <- data.frame(
  Fisher_Index = sapply(sapply(variables, skewness), round, digits=3),
  Curtosi = sapply(sapply(variables, correct_kurt), round, digits=3)
)

knitr::kable(ind.for)
Fisher_Index Curtosi
sales 0.718 -0.313
volume 0.885 0.177
median_price -0.365 -0.623
listings 0.649 -0.792
months_inventory 0.041 -0.174

Guardando i dati ottenuti, possiamo fare una serie di considerazioni.

Le variabili median price e months inventory hanno media e mediana molto simili, il che ci fa pensare che le loro distribuzioni siano particolarmente simmetriche. Dando uno sguardo agli indici di forma, possiamo vedere che questo è effettivamente il caso, specialmente per months inventory.

Il coefficiente di variazione ci permette di confrontare i livelli di dispersione relativa delle varie variabili. Possiamo quindi affermare che volume è la variabile che presenta la maggiore variabilità relativa, mentre median_price è quella che presenta la minore variabilità relativa.

Tutte le variabili tranne median price hanno distribuzione asimmetrica positiva, come possiamo vedere dal segno dell’indice di Fisher. Per quanto riguarda lo schiacciamento dei dati, la distribuzione di volume è leptocurtica, mentre tutte le altre sono platicurtiche.

3. Identificazione delle variabili con maggiore variabilità e asimmetria

La variabile con la più alta variabilità è la variabile “volume”, perché ha il coefficiente di variazione più alto. Sempre “volume” è anche la variabile più asimmetrica, con asimmetria positiva, dal momento che il valore assoluto del suo indice di Fisher è il più alto.

4. Creazione di classi per una variabile quantitativa

Suddividiamo la variabile “sales” in classi. Scegliamo il numero di classi utlizzando la regola di Sturges:

N <- round(1+log(length(sales), base = 2))
N
## [1] 9

Quindi il numero di classi è uguale a 9.

table(texas["sales_cl"])

In basso ecco una tabella con frequenze assolute e relative:

freq_ass<-table(sales_cl)
freq_rel<-round(table(sales_cl)/length(sales), digits = 3)
distr_frq_sales_cl<-cbind(freq_ass,freq_rel)
distr_frq_sales_cl
##           freq_ass freq_rel
## (78,116]        45    0.188
## (116,155]       50    0.208
## (155,193]       46    0.192
## (193,231]       27    0.112
## (231,270]       23    0.096
## (270,308]       26    0.108
## (308,346]       10    0.042
## (346,385]        9    0.038
## (385,423]        4    0.017

Rappresentiamo ora per maggior chiarezza le frequenze assolute con un grafico a barre.

ggplot(data=texas)+
  geom_bar(aes(x=sales_cl),
           stat='count',
           col='black',
           fill='blue')+
  labs(title = 'Distribuzione delle classi numero vendite mensili',
       x='Classi di vendita',
       y='Frequenze assolute')+
  theme_classic()

gini.index<-function(x){
  ni=table(x)
  fi=ni/length(x)
  fi2=fi^2
  J=length(table(x))
  gini=1-sum(fi2)
  gini.norm=gini/((J-1)/J)
  return(gini.norm)
}

paste("L'indice di Gini è", round(gini.index(sales_cl), digits = 3))
## [1] "L'indice di Gini è 0.954"

L’indice di eterogeneità è molto alto, indicando una distribuzione relativamente equa del numero di vendite tra le varie classi.

5. Calcolo della probabilità

“Qual è la probabilità che, presa una riga a caso di questo dataset, essa riporti la città “Beaumont”?”

C’è una riga col nome di una delle quattro città per ogni mese degli anni dal 2010 al 2014. Quindi c’è lo stesso numero di righe per ogni città. Di conseguenza, la probabilità è 1/4.

“E la probabilità che riporti il mese di Luglio?”

Il mese di luglio è presente una volta per ogni anno, ognuno dei quali contiene 12 mesi, perciò la probabilità è di 1/12.

“E la probabilità che riporti il mese di dicembre 2012?”

Per dicembre 2012 ci sono quattro osservazioni, una per ciascuna città, su un totale di 240 righe. La probabilità è quindi 4/240=1/60.

6. Creazione di nuove variabili

Creiamo una nuova variabile che rappresenti il prezzo medio degli immobili dividendo il volume totale delle vendite per il numero delle vendite: “mean_price”=volume”/“sales”. Poi misuriamo l’efficacia degli annunci di vendita introducendo una variabile che fornisca il numero di vendite per ogni annuncio pubblicato: “efficacy”=“sales”/“listings”.

Per poter commentare e analizzare queste nuove variabili, ci chiediamo ad esempio, come variano i loro valori medi tra le varie città.

texas %>%
  group_by(city) %>%
  summarise(
    mean_price = round(mean(mean_price)),
    efficacy = mean(listings_efficacy)
  )
## # A tibble: 4 × 3
##   city                  mean_price efficacy
##   <chr>                      <dbl>    <dbl>
## 1 Beaumont                  146640   0.106 
## 2 Bryan-College Station     183534   0.147 
## 3 Tyler                     167677   0.0935
## 4 Wichita Falls             119430   0.128

Dalla tabella risulta che nell’arco degli anni dal 2010 al 2014 i prezzi più alti e la maggiore efficacia degli annunci sono stati a Bryan-College Station, mentre i prezzi più bassi a Wichita Falls e l’efficacia peggiore a Tyler.

Calcoliamo ora i valori medi delle variabili nei 5 anni presi in considerazione.

texas %>%
  group_by(year) %>%
  summarise(
    mean_price = round(mean(mean_price)),
    efficacy = mean(listings_efficacy)
  )
## # A tibble: 5 × 3
##    year mean_price efficacy
##   <int>      <dbl>    <dbl>
## 1  2010     150189   0.0997
## 2  2011     148251   0.0927
## 3  2012     150899   0.110 
## 4  2013     158705   0.135 
## 5  2014     163559   0.157

Possiamo osservare, quindi, che complessivamente nelle quattro città considerate sia i prezzi medi che l’efficacia degli annunci sembra essere cresciuta nei 5 anni in esame, specialmente nel 2013 e 2014.

7. Analisi Condizionata

Procediamo a usare il pacchetto dplyr per effettuare analisi statistiche condizionate per città, anno e mese. I risultati saranno rappresentati graficamente.

7.1 Numero totale di vendite

sales_city <- texas %>%
  group_by(city)%>%
  summarise(media=mean(sales),
            dev.standard=sd(sales))
sales_city
## # A tibble: 4 × 3
##   city                  media dev.standard
##   <chr>                 <dbl>        <dbl>
## 1 Beaumont               177.         41.5
## 2 Bryan-College Station  206.         85.0
## 3 Tyler                  270.         62.0
## 4 Wichita Falls          116.         22.2
ggplot(sales_city, aes(x = city, y = media)) +
  geom_col(fill = 'blue') +
  geom_errorbar(
    aes(
      ymin = media - dev.standard,
      ymax = media + dev.standard
    ), width = 0.2) +
  labs(
    x = "Città",
    y = "Media delle vendite",
    title = "7.1.1 Vendite medie per città"
  )

sales_year <- texas %>%
  group_by(year)%>%
  summarise(media=round(mean(sales)),
            dev.standard=sd(sales))
sales_year
## # A tibble: 5 × 3
##    year media dev.standard
##   <int> <dbl>        <dbl>
## 1  2010   169         60.5
## 2  2011   164         63.9
## 3  2012   186         70.9
## 4  2013   212         84.0
## 5  2014   231         95.5
ggplot(sales_year, aes(x = year, y = media)) +
  geom_line(col = 'blue') +
  geom_point() +
  geom_errorbar(
    aes(
      ymin = media - dev.standard,
      ymax = media + dev.standard
    ),
    width = 0.1, col='red'
  ) +
  scale_x_continuous(breaks = 2010:2014) +
  labs(
    x = "Anno",
    y = "Media delle vendite",
    title = "7.1.2 Vendite medie per anno"
  )

sales_month <- texas %>%
  group_by(month)%>%
  summarise(media=round(mean(sales)),
            dev.standard=sd(sales))
sales_month
## # A tibble: 12 × 3
##    month media dev.standard
##    <int> <dbl>        <dbl>
##  1     1   127         43.4
##  2     2   141         51.1
##  3     3   189         59.2
##  4     4   212         65.4
##  5     5   239         83.1
##  6     6   244         95.0
##  7     7   236         96.3
##  8     8   231         79.2
##  9     9   182         72.5
## 10    10   180         75.0
## 11    11   157         55.5
## 12    12   169         60.7
ggplot(sales_month, aes(x = month, y = media)) +
  geom_line(col = 'blue') +
  geom_point() +
  geom_errorbar(
    aes(
      ymin = media - dev.standard,
      ymax = media + dev.standard
    ),
    width = 0.1, col='red'
  ) +
  scale_x_continuous(breaks = 1:12) +
  labs(
    x = "Mese",
    y = "Media delle vendite",
    title = "7.1.3 Vendite medie per mese"
  )

7.2 Valore totale delle vendite

volume_city<-texas %>%
  group_by(city)%>%
  summarise(media=round(mean(volume)),
            dev.standard=sd(volume))
volume_city
## # A tibble: 4 × 3
##   city                  media dev.standard
##   <chr>                 <dbl>        <dbl>
## 1 Beaumont                 26         6.97
## 2 Bryan-College Station    38        17.2 
## 3 Tyler                    46        13.1 
## 4 Wichita Falls            14         3.24
ggplot(volume_city, aes(x = city, y = media)) +
  geom_col(fill = 'darkgreen') +
  geom_errorbar(
    aes(
      ymin = media - dev.standard,
      ymax = media + dev.standard
    ), width = 0.2) +
  labs(
    x = "Città",
    y = "Media valori vendite",
    title = "7.2.1 Valore medio delle vendite per città"
  )

volume_year<-texas %>%
  group_by(year)%>%
  summarise(media=mean(volume),
            dev.standard=sd(volume))
volume_year
## # A tibble: 5 × 3
##    year media dev.standard
##   <int> <dbl>        <dbl>
## 1  2010  25.7         10.8
## 2  2011  25.2         12.2
## 3  2012  29.3         14.5
## 4  2013  35.2         17.9
## 5  2014  39.8         21.2
ggplot(volume_year, aes(x = year, y = media)) +
  geom_line(col = 'darkgreen') +
  geom_point() +
  geom_errorbar(
    aes(
      ymin = media - dev.standard,
      ymax = media + dev.standard
    ),
    width = 0.1, col='red'
  ) +
  scale_x_continuous(breaks = 2010:2014) +
  labs(
    x = "Anno",
    y = "Media valori vendite",
    title = "7.2.2 Valore medio delle vendite per anno"
  )

volume_month<-texas %>%
  group_by(month)%>%
  summarise(media=mean(volume),
            dev.standard=sd(volume))
volume_month
## # A tibble: 12 × 3
##    month media dev.standard
##    <int> <dbl>        <dbl>
##  1     1  19.0         8.37
##  2     2  21.7        10.1 
##  3     3  29.4        12.0 
##  4     4  33.3        14.5 
##  5     5  39.7        19.0 
##  6     6  41.3        21.1 
##  7     7  39.1        21.4 
##  8     8  38.0        18.0 
##  9     9  29.6        15.2 
## 10    10  29.1        15.1 
## 11    11  24.8        11.2 
## 12    12  27.1        12.6
ggplot(volume_month, aes(x = month, y = media)) +
  geom_line(col = 'darkgreen') +
  geom_point() +
  geom_errorbar(
    aes(
      ymin = media - dev.standard,
      ymax = media + dev.standard
    ),
    width = 0.1, col='red'
  ) +
  scale_x_continuous(breaks = 1:12) +
  labs(
    x = "Mese",
    y = "Media valori vendite",
    title = "7.2.3 Valore medio delle vendite per mese"
  )

7.3 Numero totale di annunci attivi

list_city<-texas %>%
  group_by(city)%>%
  summarise(media=round(mean(listings)),
            dev.standard=round(sd(listings)))
list_city
## # A tibble: 4 × 3
##   city                  media dev.standard
##   <chr>                 <dbl>        <dbl>
## 1 Beaumont               1679           91
## 2 Bryan-College Station  1458          253
## 3 Tyler                  2905          227
## 4 Wichita Falls           910           74
ggplot(list_city, aes(x = city, y = media)) +
  geom_col(fill = 'orange') +
  geom_errorbar(
    aes(
      ymin = media - dev.standard,
      ymax = media + dev.standard
    ), width = 0.2) +
  labs(
    x = "Città",
    y = "Media degli annunci",
    title = "7.3.1 Numero annunci medio per città"
  )

list_year<-texas %>%
  group_by(year)%>%
  summarise(media=round(mean(listings)),
            dev.standard=round(sd(listings)))
list_year
## # A tibble: 5 × 3
##    year media dev.standard
##   <int> <dbl>        <dbl>
## 1  2010  1826          785
## 2  2011  1850          780
## 3  2012  1777          738
## 4  2013  1678          744
## 5  2014  1560          707
ggplot(list_year, aes(x = year, y = media)) +
  geom_line(col = 'orange') +
  geom_point() +
  geom_errorbar(
    aes(
      ymin = media - dev.standard,
      ymax = media + dev.standard
    ),
    width = 0.1, col='red'
  ) +
  scale_x_continuous(breaks = 2010:2014) +
  labs(
    x = "Anno",
    y = "Media degli annunci",
    title = "7.3.2 Numero annunci medio per anno"
  )

list_month<-texas %>%
  group_by(month)%>%
  summarise(media=round(mean(listings)),
            dev.standard=round(sd(listings)))
list_month
## # A tibble: 12 × 3
##    month media dev.standard
##    <int> <dbl>        <dbl>
##  1     1  1647          705
##  2     2  1692          711
##  3     3  1757          727
##  4     4  1826          770
##  5     5  1824          790
##  6     6  1833          812
##  7     7  1821          827
##  8     8  1786          816
##  9     9  1749          803
## 10    10  1710          779
## 11    11  1653          741
## 12    12  1558          693
ggplot(list_month, aes(x = month, y = media)) +
  geom_line(col = 'orange') +
  geom_point() +
  geom_errorbar(
    aes(
      ymin = media - dev.standard,
      ymax = media + dev.standard
    ),
    width = 0.1, col='red'
  ) +
  scale_x_continuous(breaks = 1:12) +
  labs(
    x = "Mese",
    y = "Media degli annunci",
    title = "7.3.3 Numero annunci medio per mese"
  )

7.4 Mesi di inventario

invent_city<-texas %>%
  group_by(city)%>%
  summarise(media=mean(months_inventory),
            dev.standard=sd(months_inventory))
invent_city
## # A tibble: 4 × 3
##   city                  media dev.standard
##   <chr>                 <dbl>        <dbl>
## 1 Beaumont               9.97        1.65 
## 2 Bryan-College Station  7.66        2.25 
## 3 Tyler                 11.3         1.89 
## 4 Wichita Falls          7.82        0.781
ggplot(invent_city, aes(x = city, y = media)) +
  geom_col(fill = 'purple') +
  geom_errorbar(
    aes(
      ymin = media - dev.standard,
      ymax = media + dev.standard
    ), width = 0.2) +
  labs(
    x = "Città",
    y = "Media mesi di inventario",
    title = "7.4.1 Media dei mesi di inventario per città"
  )

invent_year<-texas %>%
  group_by(year)%>%
  summarise(media=mean(months_inventory),
            dev.standard=sd(months_inventory))
invent_year
## # A tibble: 5 × 3
##    year media dev.standard
##   <int> <dbl>        <dbl>
## 1  2010  9.97         2.08
## 2  2011 10.9          2.07
## 3  2012  9.88         1.61
## 4  2013  8.15         1.69
## 5  2014  7.06         1.75
ggplot(invent_year, aes(x = year, y = media)) +
  geom_line(col = 'purple') +
  geom_point() +
  geom_errorbar(
    aes(
      ymin = media - dev.standard,
      ymax = media + dev.standard
    ),
    width = 0.1, col='red'
  ) +
  scale_x_continuous(breaks = 2010:2014) +
  labs(
    x = "Anno",
    y = "Media mesi di inventario",
    title = "7.4.2 Media dei mesi di inventario per anno"
  )

invent_month<-texas %>%
  group_by(month)%>%
  summarise(media=mean(months_inventory),
            dev.standard=sd(months_inventory))
invent_month
## # A tibble: 12 × 3
##    month media dev.standard
##    <int> <dbl>        <dbl>
##  1     1  8.84         1.97
##  2     2  9.06         1.98
##  3     3  9.40         2.06
##  4     4  9.72         2.24
##  5     5  9.68         2.38
##  6     6  9.70         2.41
##  7     7  9.62         2.50
##  8     8  9.39         2.45
##  9     9  9.18         2.52
## 10    10  8.94         2.44
## 11    11  8.66         2.37
## 12    12  8.12         2.27
ggplot(invent_month, aes(x = month, y = media)) +
  geom_line(col = 'purple') +
  geom_point() +
  geom_errorbar(
    aes(
      ymin = media - dev.standard,
      ymax = media + dev.standard
    ),
    width = 0.1, col='red'
  ) +
  scale_x_continuous(breaks = 1:12) +
  labs(
    x = "Mese",
    y = "Media mesi di inventario",
    title = "7.4.3 Media dei mesi di inventario per mese"
    )

7.5 Prezzo mediano di vendita

median_city<-texas %>%
  group_by(city)%>%
  summarise(media=round(mean(median_price)),
            dev.standard=round(sd(median_price)))
median_city
## # A tibble: 4 × 3
##   city                   media dev.standard
##   <chr>                  <dbl>        <dbl>
## 1 Beaumont              129988        10105
## 2 Bryan-College Station 157488         8852
## 3 Tyler                 141442         9337
## 4 Wichita Falls         101743        11320
ggplot(median_city, aes(x = city, y = media)) +
  geom_col(fill = 'lightgreen') +
  geom_errorbar(
    aes(
      ymin = media - dev.standard,
      ymax = media + dev.standard
    ), width = 0.2) +
  labs(
    x = "Città",
    y = "Media prezzo mediano",
    title = "7.5.1 Media prezzo mediano per città"
  )

median_year<-texas %>%
  group_by(year)%>%
  summarise(media=round(mean(median_price)),
            dev.standard=round(sd(median_price)))
median_year
## # A tibble: 5 × 3
##    year  media dev.standard
##   <int>  <dbl>        <dbl>
## 1  2010 130192        21822
## 2  2011 127854        21318
## 3  2012 130077        21432
## 4  2013 135723        21708
## 5  2014 139481        25625
ggplot(median_year, aes(x = year, y = media)) +
  geom_line(col = 'lightgreen') +
  geom_point() +
  geom_errorbar(
    aes(
      ymin = media - dev.standard,
      ymax = media + dev.standard
    ),
    width = 0.1, col='red'
  ) +
  scale_x_continuous(breaks = 2010:2014) +
  labs(
    x = "Anno",
    y = "Media prezzo mediano",
    title = "7.5.2 Media prezzo mediano per anno"
  )

median_month<-texas %>%
  group_by(month)%>%
  summarise(media=mean(median_price),
            dev.standard=round(sd(median_price)))
median_month
## # A tibble: 12 × 3
##    month  media dev.standard
##    <int>  <dbl>        <dbl>
##  1     1 124250        25151
##  2     2 130075        22823
##  3     3 127415        23442
##  4     4 131490        21458
##  5     5 134485        18796
##  6     6 137620        19231
##  7     7 134750        21945
##  8     8 136675        22488
##  9     9 134040        24344
## 10    10 133480        26358
## 11    11 134305        24691
## 12    12 133400        22810
ggplot(median_month, aes(x = month, y = media)) +
  geom_line(col = 'lightgreen') +
  geom_point() +
  geom_errorbar(
    aes(
      ymin = media - dev.standard,
      ymax = media + dev.standard
    ),
    width = 0.1, col='red'
  ) +
  scale_x_continuous(breaks = 1:12) +
  labs(
    x = "Mese",
    y = "Media prezzo mediano",
    title = "7.5.3 Media prezzo mediano per mese"
  )

8. Creazione di visualizzazioni con ggplot2

ggplot(data=texas)+
  geom_boxplot(aes(x=city, y=median_price), fill='lightblue')+
  labs(x='Città', y='Prezzo mediano', title = '8.1 Boxplot del prezzo mediano per città')

texas3 <- data.frame(texas)
texas3$year <- as.character(texas$year)

ggplot(data=texas3)+
  geom_boxplot(aes(x=year, y=volume, fill=city))+
  labs(x='Anni', y='Totale vendite (in milioni di $)',
       title = '8.2 Boxplot del totale vendite per anni e città')

ggplot(data=texas)+
  geom_bar(aes(x=month, y=volume,
               fill=city),
           position = 'stack',
           stat='identity',
           col='black')+
  facet_wrap(year, ncol=2)+
  labs(title = '8.3 Totale vendite per mese, anno e città',
       x='Mesi',
       y='Totale vendite (in milioni di $)')+
  scale_x_continuous(breaks=1:12)+
  theme_classic()

ggplot(data=texas)+
  geom_bar(aes(x=month, y=volume,
               fill=city),
           position = 'fill',
           stat='identity',
           col='black')+
  facet_wrap(year, ncol=2)+
  labs(title = '8.4 Totale vendite normalizzato per mese, anno e città',
       x='Mesi',
       y='Quota percentuale del totale (in milioni di $)')+
  scale_x_continuous(breaks=1:12)+
  theme_classic()

texas2 <- data.frame(texas)
texas2$year <- rep(seq(2010+1/24,2014+23/24,1/12),times=4)
texas2$month <- NULL

ggplot(data=texas2)+
  geom_line(aes(x=year, y=sales), col='red', lwd=1)+
  geom_point(aes(x=year, y=sales), col='red', lwd=3)+
  facet_wrap(~city)+
  labs(x ="Anni", 
       y ="Numero di Vendite",
       title = "8.5 Andamento delle vendite")+
  scale_x_continuous(breaks = seq(2010,2015,1))
## Warning in geom_point(aes(x = year, y = sales), col = "red", lwd = 3): Ignoring
## unknown parameters: `linewidth`

9. Conclusioni

Un dato che emerge immediatamente osservando l’andamento mensile delle vendite nel grafico 7.1.3 è che la maggior parte è concentrata nel periodo tardo primaverile ed estivo, nei mesi da maggio ad agosto. Nel grafico 8.3 possiamo però notare che l’anno 2010 costituisce un’eccezione al trend, siccome il picco si è avuto nei mesi da aprile a giugno. Questo andamento complessivo è particolarmente influenzato dalle due città caratterizzate dai maggiori volumi di vendita, Bryan-College Station e Tyler, la cui dinamica ha quindi un peso maggiore sul dato aggregato. Per quanto riguarda, invece, Beaumont e Wichita Falls, possiamo vedere dal grafico 8.5 che gli andamenti delle vendite sono più irregolari, ma tendenzialmente i mesi da novembre a febbraio sembrano essere quelli con meno vendite anche in questo caso.

Nella sezione 7, i grafici a colonne relativi ai dati medi per le singole città ci mostrano che le variabili sales e volume presentano un andamento simile tra le diverse città: in particolare, i valori più alti sono registrati a Tyler e quelli più bassi a Wichita Falls. I grafici analoghi per le variabili listings e months_inventory presentano invece valori relativamente più bassi per Bryan-College Station. Questo è coerente con quanto osservato nella sezione 6, dove avevamo riscontrato che il rapporto tra sales e listings era il più alto per questa città. Infine, per quanto riguarda la variabile median_price, la città con i valori più elevati è Bryan-College Station.

Osservando i grafici relativi all’andamento annuale delle medie nella sezione 7, notiamo che dal 2011 il numero delle vendite, il valore delle vendite e il prezzo mediano sono in crescita, mentre il numero degli annunci e i mesi di inventario diminuiscono. Tuttavia, va sottolineato che i grafici che rappresentano gli andamenti nel tempo delle diverse variabili presentano generalmente deviazioni standard elevate, a parte quello della variabile months_inventory. Questo indica che, all’interno dei diversi anni e mesi, i valori delle singole città possono differire sensibilmente dalla media complessiva. Di conseguenza, gli andamenti aggregati potrebbero nascondere differenze significative tra le città e sarebbe necessario analizzare più nel dettaglio i singoli mercati per comprendere meglio il fenomeno. Questo è stato fatto per il caso della variabile sales, nel grafico 8.5: le curve mostrano effettivamente un andamento crescente nel periodo considerato, al netto dei cambiamenti stagionali, in Beaumont, Bryan-College Station e Tyler.

Esaminando i grafici della sezione 8 che non abbiamo ancora citato, il grafico 8.1 evidenzia innanzitutto una netta differenza nei livelli dei prezzi mediani tra le quattro città. Bryan-College Station presenta i valori più elevati, seguita da Tyler, Beaumont e infine Wichita Falls. Per quanto riguarda la dispersione, Wichita Falls mostra l’intervallo interquartile più ampio e quindi una maggiore variabilità dei prezzi nella metà centrale delle osservazioni, mentre Bryan-College Station presenta una distribuzione centrale relativamente più concentrata. Sono inoltre presenti tre valori anomali, uno per Beaumont, uno per Wichita Falls e uno per Bryan-College Station, caratterizzati da prezzi mediani particolarmente elevati rispetto alle rispettive distribuzioni.

Il grafico 8.2 evidenzia invece una forte variabilità del valore totale delle vendite, che differisce sensibilmente tra città e anni. In particolare, Bryan-College Station e Tyler presentano in diversi anni intervalli interquartili più ampi, indicando una maggiore dispersione dei valori mensili, mentre Wichita Falls mostra generalmente una variabilità più contenuta. Si osserva inoltre uno spostamento verso valori più elevati negli anni successivi, coerente con la crescita del volume osservata nell’analisi annuale. È presente infine un valore anomalo per Beaumont nel 2012.

Il grafico 8.4, ottenuto normalizzando i valori, permette invece di confrontare la composizione percentuale del valore totale delle vendite tra le diverse città. Si osserva che Tyler e Bryan-College Station rappresentano generalmente le quote maggiori del volume complessivo, mentre Beaumont e soprattutto Wichita Falls contribuiscono in misura minore. Le proporzioni risultano tuttavia abbastanza stabili nel tempo, indicando che il peso relativo delle diverse città sul volume complessivo non varia significativamente nel periodo considerato.

Sulla base dei risultati ottenuti, Texas Realty Insights dovrebbe tenere conto della forte componente stagionale delle vendite nella pianificazione e nell’interpretazione dei dati, evitando di confrontare direttamente periodi appartenenti a stagioni diverse senza considerare questo effetto. Inoltre, le marcate differenze osservate tra i mercati locali suggeriscono di adottare attività di monitoraggio e analisi differenziate per ciascuna città, affiancando agli indicatori aggregati quelli specifici dei singoli mercati.