options(repos = c(CRAN = "https://cloud.r-project.org/"))
install.packages("moments")
## Installazione pacchetto in 'C:/Users/zav/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\zav\AppData\Local\Temp\Rtmpa0dGPW\downloaded_packages
- Analisi delle variabili
city: Variabile qual. nominale year: Var. quant. continua month: Var.
qual. nominale sales: variabile quantitativa discreta (esprime un
conteggio) volume: varibile qua.tiva continua median_price: varibile
qua.tiva continua listings: variabile quantitativa discreta (esprime un
conteggio) months_inventory: varibile qua.tiva continua
Potrei calcolare per tutte la distribuzione di frequenza. -Indici di
posizione: Media su sales,volume,month inventory e listings/Moda su
Month e Year per capire i periodi più ricorrenti/Mediana su Sales
essendoci presente già Median price -Indice di variabilità: Varianza
& Deviazione standard su sales, volume, median price, months
inventor/IQR: utile per median price, sales e months inventory/Range:
sales, listings, e months_inventory (divario tra valori estremi?)
-Indice di forma: Asimmetria su sales, volume e month inventory /
Curtosi su Volume e sales
2.Calcoliamo indici di posizione
library(readr)
realestate_texas=read_csv("realestate_texas.csv")
## Rows: 240 Columns: 8
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): city
## dbl (7): year, month, sales, volume, median_price, listings, months_inventory
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
library(knitr)
#media
kable(round(mean(realestate_texas$sales), 2))
kable(round(mean(realestate_texas$volume), 2))
kable(round(mean(realestate_texas$months_inventory), 2))
kable(round(mean(realestate_texas$listings), 2))
#Moda
kable(table(realestate_texas$month))
| 1 |
20 |
| 2 |
20 |
| 3 |
20 |
| 4 |
20 |
| 5 |
20 |
| 6 |
20 |
| 7 |
20 |
| 8 |
20 |
| 9 |
20 |
| 10 |
20 |
| 11 |
20 |
| 12 |
20 |
kable(table(realestate_texas$year))
| 2010 |
48 |
| 2011 |
48 |
| 2012 |
48 |
| 2013 |
48 |
| 2014 |
48 |
#Mediana
kable(round(median(realestate_texas$sales), 2))
#Calcoliamo indici di variabilità
##COEFFICIENTE DI VARIAZIONE
install.packages("raster")
## Installazione pacchetto in 'C:/Users/zav/AppData/Local/R/win-library/4.4'
## (perché 'lib' non è specificato)
## pacchetto 'raster' aperto con successo con controllo somme MD5
##
## I pacchetti binari scaricati sono in
## C:\Users\zav\AppData\Local\Temp\Rtmpa0dGPW\downloaded_packages
library(raster)
## Caricamento del pacchetto richiesto: sp
kable(round(cv(realestate_texas$sales), 2))
kable(round(cv(realestate_texas$volume), 2))
kable(round(cv(realestate_texas$median_price), 2))
kable(round(cv(realestate_texas$months_inventory), 2))
#Varianza
kable(round(var(realestate_texas$sales), 2))
kable(round(var(realestate_texas$volume), 2))
kable(round(var(realestate_texas$median_price), 2))
kable(round(var(realestate_texas$months_inventory), 2))
#deviazione standard
kable(round(sd(realestate_texas$sales), 2))
kable(round(sd(realestate_texas$volume), 2))
kable(round(sd(realestate_texas$median_price), 2))
kable(round(sd(realestate_texas$months_inventory), 2))
#range
kable(range(realestate_texas$sales))
kable(range(realestate_texas$listings))
kable(range(realestate_texas$months_inventory))
#IQR
kable(round(IQR(realestate_texas$months_inventory), 2))
kable(round(IQR(realestate_texas$sales), 2))
kable(round(IQR(realestate_texas$median_price), 2))
#indici di forma
install.packages("moments")
## Installazione pacchetto in 'C:/Users/zav/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\zav\AppData\Local\Temp\Rtmpa0dGPW\downloaded_packages
library(moments)
kable(round(skewness(realestate_texas$sales), 2))
kable(round(skewness(realestate_texas$volume), 2))
kable(round(skewness(realestate_texas$months_inventory), 2))
kable(round(kurtosis(realestate_texas$sales) - 3, 2))
kable(round(kurtosis(realestate_texas$volume) - 3, 2))
Considerazioni: L’analisi dei dati sulle vendite e sul volume rivela
una notevole variabilità e una certa asimmetria verso destra. Questo
significa che, sebbene la maggior parte dei valori si concentri attorno
alla media, ci sono alcuni mesi in cui le vendite e il volume hanno
raggiunto picchi particolarmente elevati, contribuendo ad allungare la
coda della distribuzione verso l’alto.
Al contrario, il prezzo mediano degli immobili appare molto più
stabile: la sua variabilità relativa è contenuta, suggerendo che, nel
periodo analizzato, i prezzi non hanno subito oscillazioni
significative.
La variabile relativa ai mesi di inventario mostra invece una
distribuzione molto regolare, praticamente simmetrica e priva di code
evidenti. Questo indica che i valori si distribuiscono in modo
equilibrato attorno alla media, senza forti deviazioni o estremi.
Infine, gli indici di asimmetria (skewness) e curtosi confermano che
le distribuzioni non seguono perfettamente un andamento normale, ma non
presentano neanche deformazioni marcate. Le deviazioni dalla normalità
sono lievi e non tali da compromettere l’interpretazione dei dati.
3.Identificazione delle variabili con maggiore variabilità e
asimmetria
Il numero di vendite (sales) varia molto tra le osservazioni,
suggerendo che le condizioni del mercato immobiliare cambiano molto nel
tempo/anni o tra le varie città. La variabile con la distribuzione più
asimmetrica è Volume, con una asimmetria di 0.884742. Questo valore
indica una distribuzione asimmetrica positiva, quindi c’è una coda lunga
verso i valori più alti.
- Creazione di classi per una variabile quantitativa #Divideremo la
variabile sales in classi. 3 classi da 150 vendite ovvero:
0-150,150-300,300-450
Classi_sales<- cut(realestate_texas$sales,
breaks=c(79,150,300,450))
View(Classi_sales)
#Creiamo N
N=dim (realestate_texas)[1]
Costruiamo la tabella delle 4 frequenza
ni<-table(Classi_sales)
fi<-table(Classi_sales)/N
Ni<-cumsum(ni)
Fi<-cumsum(ni)/N
Vediamo la distribuzione totale
cbind(ni,fi,Ni,Fi)
## ni fi Ni Fi
## (79,150] 91 0.3791667 91 0.3791667
## (150,300] 122 0.5083333 213 0.8875000
## (300,450] 25 0.1041667 238 0.9916667
distr_fre_sales=as.data.frame(cbind(ni,fi,Ni,Fi))
#grafico a barre
barplot(distr_fre_sales$ni,
main="distribuzione vendite",
xlab="vendite",
ylab="freq.assolute",
ylim = c(0,450),#ylim estende il limite delle assi (va fino a 10 in questo caso)
col = "red",
names.arg = rownames(distr_fre_sales))

Calcolo Gini
install.packages("dplyr")
## Installazione pacchetto in 'C:/Users/zav/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\zav\AppData\Local\Temp\Rtmpa0dGPW\downloaded_packages
library(dplyr)
##
## Caricamento pacchetto: 'dplyr'
## I seguenti oggetti sono mascherati da 'package:raster':
##
## intersect, select, union
## I seguenti oggetti sono mascherati da 'package:stats':
##
## filter, lag
## I seguenti oggetti sono mascherati da 'package:base':
##
## intersect, setdiff, setequal, union
Gini.index=function(Classi_sales){
ni=table(Classi_sales)
fi=ni/length(Classi_sales)
fi2=fi^2
j=length(table(Classi_sales))
gini= 1-sum(fi2)
gini.normalizzato= gini/((j-1)/j)
return(gini.normalizzato)
}
kable(table(Classi_sales))
| (79,150] |
91 |
| (150,300] |
122 |
| (300,450] |
25 |
kable(round(Gini.index(Classi_sales), 2))
Il 50.83% delle osservazioni rientra nella classe 150-300, il che
indica che la maggior parte delle vendite è “distribuita” in questo
intervallo.Ciò è supportato dall’ indice di Gini vicino ad 1 che
evidenzia una distribuzione non equa.
5 Calcolo delle probabilità
Non essendo variabili continue uso la definizione classica di
probabilità, che è semplicemente il numero di casi favorevoli diviso il
numero totale di casi possibili.
N = 240
A = nrow(subset(realestate_texas, city == "Beaumont")) / N
B = nrow(subset(realestate_texas, month == 7)) / N
C = nrow(subset(realestate_texas, month == 12 & year == 2012)) / N
kable(round(A, 3))
kable(round(B, 3))
kable(round(C, 3))
Le probabilità calcolate sono: Probabilità che una riga riporti la
città “Beaumont”: 25%/Probabilità che il mese sia Luglio:
8.33%/Probabilità che il mese sia Dicembre 2012: 1.67%
- Creazione di nuove variabili Parto dividendo volume e vendite totali
per ottenere prezzo medio
volume=sum(realestate_texas$volume)*1000
vendite=sum(realestate_texas$sales)
Prezzo_medio = round(volume / vendite, 2)
#Possiamo misurare l'efficacia degli annunci di vendita confrontando il numero di vendite (sales) con il numero di annunci (listings)
realestate_texas <- realestate_texas %>%
mutate(efficacy = sales / listings)
summary(round(realestate_texas$efficacy, 2))
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0500 0.0900 0.1100 0.1184 0.1325 0.3900
Considerazioni:In media solo il 12% degli annunci porta a una
vendita. Questo indica un mercato con un turnover moderato, dove molte
case rimangono invendute.Distribuzione: L’ampia variabilità indica che
ci sono forti differenze tra città nei mesi e negli anni.
7.Analisi condizionata
library(dplyr)
library(ggplot2)
str(realestate_texas)
## tibble [240 × 9] (S3: tbl_df/tbl/data.frame)
## $ city : chr [1:240] "Beaumont" "Beaumont" "Beaumont" "Beaumont" ...
## $ year : num [1:240] 2010 2010 2010 2010 2010 2010 2010 2010 2010 2010 ...
## $ month : num [1:240] 1 2 3 4 5 6 7 8 9 10 ...
## $ sales : num [1:240] 83 108 182 200 202 189 164 174 124 150 ...
## $ volume : num [1:240] 14.2 17.7 28.7 26.8 28.8 ...
## $ median_price : num [1:240] 163800 138200 122400 123200 123100 ...
## $ listings : num [1:240] 1533 1586 1689 1708 1771 ...
## $ months_inventory: num [1:240] 9.5 10 10.6 10.6 10.9 11.1 11.7 11.6 11.7 11.5 ...
## $ efficacy : num [1:240] 0.0541 0.0681 0.1078 0.1171 0.1141 ...
summary(realestate_texas)
## 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
## efficacy
## Min. :0.05014
## 1st Qu.:0.08980
## Median :0.10963
## Mean :0.11874
## 3rd Qu.:0.13492
## Max. :0.38713
Analisi statistica: media e deviazione standard per città, anno e
mese
summary_stats_city <- realestate_texas %>%
group_by(city) %>%
summarise(
mean_sales = round(mean(sales, na.rm = TRUE), 2),
sd_sales = round(sd(sales, na.rm = TRUE), 2),
mean_volume = round(mean(volume, na.rm = TRUE), 2),
sd_volume = round(sd(volume, na.rm = TRUE), 2),
mean_price = round(mean(median_price, na.rm = TRUE), 2),
sd_price = round(sd(median_price, na.rm = TRUE), 2)
)
summary_stats_month <- realestate_texas %>%
group_by(month) %>%
summarise(
mean_sales = round(mean(sales, na.rm = TRUE), 2),
sd_sales = round(sd(sales, na.rm = TRUE), 2),
mean_volume = round(mean(volume, na.rm = TRUE), 2),
sd_volume = round(sd(volume, na.rm = TRUE), 2),
mean_price = round(mean(median_price, na.rm = TRUE), 2),
sd_price = round(sd(median_price, na.rm = TRUE), 2)
)
summary_stats_year <- realestate_texas %>%
group_by(year) %>%
summarise(
mean_sales = round(mean(sales, na.rm = TRUE), 2),
sd_sales = round(sd(sales, na.rm = TRUE), 2),
mean_volume = round(mean(volume, na.rm = TRUE), 2),
sd_volume = round(sd(volume, na.rm = TRUE), 2),
mean_price = round(mean(median_price, na.rm = TRUE), 2),
sd_price = round(sd(median_price, na.rm = TRUE), 2)
)
kable(summary_stats_city)
| Beaumont |
177.38 |
41.48 |
26.13 |
6.97 |
129988.3 |
10104.99 |
| Bryan-College Station |
205.97 |
84.98 |
38.19 |
17.25 |
157488.3 |
8852.24 |
| Tyler |
269.75 |
61.96 |
45.77 |
13.11 |
141441.7 |
9336.54 |
| Wichita Falls |
116.07 |
22.15 |
13.93 |
3.24 |
101743.3 |
11320.03 |
kable(summary_stats_month)
| 1 |
127.40 |
43.38 |
19.00 |
8.37 |
124250 |
25151.28 |
| 2 |
140.85 |
51.07 |
21.65 |
10.09 |
130075 |
22822.59 |
| 3 |
189.45 |
59.18 |
29.38 |
12.02 |
127415 |
23442.03 |
| 4 |
211.70 |
65.40 |
33.30 |
14.52 |
131490 |
21458.40 |
| 5 |
238.85 |
83.12 |
39.70 |
19.02 |
134485 |
18796.26 |
| 6 |
243.55 |
95.00 |
41.30 |
21.08 |
137620 |
19231.02 |
| 7 |
235.75 |
96.27 |
39.12 |
21.41 |
134750 |
21944.78 |
| 8 |
231.45 |
79.23 |
38.01 |
18.05 |
136675 |
22488.38 |
| 9 |
182.35 |
72.52 |
29.60 |
15.22 |
134040 |
24344.10 |
| 10 |
179.90 |
74.95 |
29.08 |
15.13 |
133480 |
26358.07 |
| 11 |
156.85 |
55.47 |
24.81 |
11.15 |
134305 |
24691.47 |
| 12 |
169.40 |
60.75 |
27.09 |
12.57 |
133400 |
22809.76 |
kable(summary_stats_year)
| 2010 |
168.67 |
60.54 |
25.68 |
10.80 |
130191.7 |
21821.76 |
| 2011 |
164.12 |
63.87 |
25.16 |
12.20 |
127854.2 |
21317.80 |
| 2012 |
186.15 |
70.91 |
29.27 |
14.52 |
130077.1 |
21431.52 |
| 2013 |
211.92 |
84.00 |
35.15 |
17.93 |
135722.9 |
21708.08 |
| 2014 |
230.60 |
95.51 |
39.77 |
21.19 |
139481.2 |
25625.41 |
Visualizzazione grafica delle vendite medie nel tempo per città
summary_stats <- realestate_texas %>%
group_by(city, year, month) %>%
summarise(
mean_sales = mean(sales, na.rm = TRUE),
.groups = "drop"
)
ggplot(summary_stats, aes(x = factor(month), y = mean_sales, color = factor(year))) +
geom_line(aes(group = year)) +
facet_wrap(~ city) +
labs(title = "Andamento delle vendite medie per città", x = "Mese", y = "Vendite medie") +
theme_minimal()

8.Creazione di visualizzazioni con ggplot2
library(ggplot2)
library(dplyr)
#Boxplot della distribuzione del prezzo mediano per città
ggplot(realestate_texas, aes(x = city, y = median_price)) +
geom_boxplot() +
labs(title = "Distribuzione del Prezzo Mediano delle Case per Città",
x = "Città",
y = "Prezzo Mediano")

#Boxplot del valore totale delle vendite per città e anno
ggplot(realestate_texas, aes(x = city, y = volume, fill = factor(year))) +
geom_boxplot() +
labs(title = "Distribuzione del Valore Totale delle Vendite",
x = "Città",
y = "Volume delle Vendite",
fill = "Anno")

#Grafico a barre sovrapposte per il totale delle vendite per mese e città
ggplot(realestate_texas, aes(x = factor(month), y = sales, fill = city)) +
geom_bar(stat = "identity", position = "stack") +
labs(title = "Totale delle Vendite nei Vari Mesi per Città",
x = "Mese",
y = "Numero di Vendite",
fill = "Città")

#Grafico a barre normalizzato
ggplot(realestate_texas, aes(x = factor(month), y = sales, fill = city)) +
geom_bar(stat = "identity", position = "fill") +
labs(title = "Distribuzione Normalizzata delle Vendite per Mese e Città",
x = "Mese",
y = "Proporzione di Vendite",
fill = "Città")

9.Considerazioni
1)Prezzo Mediano delle Case per Città:Il boxplot ci permette di
confrontare la distribuzione dei prezzi mediani delle case tra le varie
città. Si notano differenze significative tra alcune città: Bryan è la
citta con il prezzo mediano più alto (circa 160.000\() mentre Wichita falls quella con il minore(circa
105.000\)), con alcune che presentano prezzi più alti rispetto ad
altre. Inoltre, la presenza di outlier potrebbe indicare vendite di
proprietà particolarmente costose o economiche in alcune aree.
2)Valore Totale delle Vendite per Città e Anno:Questo grafico
evidenzia come il valore totale delle vendite vari non solo tra le
città, ma anche tra gli anni.Tyler e Bryan-College Station hanno volumi
molto più elevati rispetto a Beaumont e Wichita Falls.C’è una discreta
variabilità nei vai anni, specialmente per Tyler, suggerendo che ci sono
anni con picchi più alti. Alcune città mostrano una certa stabilità nei
volumi di vendita, mentre altre evidenziano forti fluttuazioni.Le città
di Tyler e Bryan hanno dinamiche di mercato molto più attive
3)Totale delle Vendite nei Vari Mesi per Città:Il grafico a barre
sovrapposte evidenzia una stagionalità nelle vendite. Notiamo mesi con
picchi di vendite(Maggio-Luglio)il che significa che la stagionalità è
marcata. Inoltre, alcune città dominano il numero di vendite totali,
suggerendo che i mercati immobiliari locali possono avere dimensioni e
dinamiche differenti.Tyler e Bryan-College Station sono più consistenti
a supporto di quanto espresso anche prima.I mesi gennaio, novembre e
dicembre risultano i più deboli in termini di vendite.
4)Distribuzione Normalizzata delle Vendite per Mese e Città:Questo
grafico aiuta a comprendere la variazione relativa delle vendite tra le
città nei diversi mesi. Le proporzioni rimangono stabili significa che
le dinamiche del mercato sono simili in tutte le città analizzate.Tyler
rappresenta una parte significativa delle vendite quasi ogni mese. Anche
la quota di vendite di Wichita Falls e Beaumont è più stabile ma
minore.Non ci sono grossi cambiamenti nella proporzione mese per mese,
quindi il rapporto di vendite delle città tra loro è costante nel tempo.
Anche se i volumi cambiano mese per mese (come visto nel secondo
grafico), la composizione delle vendite tra le città è abbastanza
stabile.