title: ‘Analiza danych’ subtitle: ‘Analiza opisowa’ author:
“Aleksandra Kucińska” date: “2023-01-07”
Twoja kolej!
Na podstawie danych dot. rynku nieruchomości z pewnego regionu USA,
dokonaj podobnej analizy opisowej.
#Zobaczmy, jakie mamy zmienne: #DATA WRANGLING
glimpse(houses)
## Rows: 506
## Columns: 14
## $ crim <dbl> 0.00632, 0.02731, 0.02729, 0.03237, 0.06905, 0.02985, 0.08829,…
## $ zn <dbl> 18.0, 0.0, 0.0, 0.0, 0.0, 0.0, 12.5, 12.5, 12.5, 12.5, 12.5, 1…
## $ indus <dbl> 2.31, 7.07, 7.07, 2.18, 2.18, 2.18, 7.87, 7.87, 7.87, 7.87, 7.…
## $ chas <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ nox <dbl> 0.538, 0.469, 0.469, 0.458, 0.458, 0.458, 0.524, 0.524, 0.524,…
## $ rm <dbl> 6.575, 6.421, 7.185, 6.998, 7.147, 6.430, 6.012, 6.172, 5.631,…
## $ age <dbl> 65.2, 78.9, 61.1, 45.8, 54.2, 58.7, 66.6, 96.1, 100.0, 85.9, 9…
## $ dis <dbl> 4.0900, 4.9671, 4.9671, 6.0622, 6.0622, 6.0622, 5.5605, 5.9505…
## $ rad <int> 1, 2, 2, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,…
## $ tax <int> 296, 242, 242, 222, 222, 222, 311, 311, 311, 311, 311, 311, 31…
## $ ptratio <dbl> 15.3, 17.8, 17.8, 18.7, 18.7, 18.7, 15.2, 15.2, 15.2, 15.2, 15…
## $ black <dbl> 396.90, 396.90, 392.83, 394.63, 396.90, 394.12, 395.60, 396.90…
## $ lstat <dbl> 4.98, 9.14, 4.03, 2.94, 5.33, 5.21, 12.43, 19.15, 29.93, 17.10…
## $ medv <dbl> 24.0, 21.6, 34.7, 33.4, 36.2, 28.7, 22.9, 27.1, 16.5, 18.9, 15…
Nasz zbiór danych zawiera informacje o losowej próbie nieruchomości i
różnych cechach dla ich sąsiedztwa.
Ta ramka danych ma 506 wierszy i 14 kolumn (predyktorów). Mamy opisy
i podsumowania predyktorów jak poniżej: - crim: wskaźnik przestępczości
na mieszkańca według miasta. - zn: proporcja gruntów mieszkalnych
przeznaczonych na działki powyżej 25 000 stóp kwadratowych. - indus:
proporcja akrów biznesu niedetalicznego na miasto. - chas: zmienna dummy
river (= 1, jeśli działka graniczy z rzeką; 0 w przeciwnym razie). -
nox: stężenie tlenków azotu (cząsteczek na 10 milionów). - rm: średnia
liczba pokoi na mieszkanie. - age: odsetek mieszkań zamieszkanych przez
właścicieli zbudowanych przed 1940 rokiem. - dis: średnia ważona
odległości do miejskich centrów zatrudnienia. - rad: indeks dostępności
do autostrad radialnych. - tax: stawka podatku od nieruchomości o pełnej
wartości za 10 000 USD. - ptratio: współczynnik uczeń-nauczyciel według
miasta. - black: 1000(Bk - 0.63)^2 gdzie Bk jest odsetkiem czarnoskórych
w danym mieście. - lstat: status populacji poniżej progu ubóstwa
(procent). - medv: mediana wartości domów zamieszkałych przez
właścicieli w 1000$.
#DATA WRANGLING
houses$chas<-as.factor(houses$chas)
houses$rad<-as.factor(houses$rad)
houses$rm<-factor(houses$rm,ordered=TRUE)
attach(houses)
etykiety<-c("5-10","10-15 k$","15-20k$","20-25k$","25-30k$","30-35k$","35-40k$","40-45k$","45-50k$")
limits<-cut(houses$medv,seq(5, 50,by=5), labels=etykiety)
tabela1<-freq(limits,type="html")
##
|
| | 0%
|
|======================================================================| 100%
kbl(tabela1,caption = "Nieruchomości w USA - ceny w 1000$") %>%
kable_material(c("striped", "hover"))
Nieruchomości w USA - ceny w 1000$
|
|
x
|
label
|
Freq
|
Percent
|
Valid Percent
|
Cumulative Percent
|
|
Valid
|
5-10
|
|
22
|
4.3
|
4.4
|
4.4
|
|
|
10-15 k$
|
|
73
|
14.4
|
14.5
|
18.8
|
|
|
15-20k$
|
|
118
|
23.3
|
23.4
|
42.3
|
|
|
20-25k$
|
|
167
|
33.0
|
33.1
|
75.4
|
|
|
25-30k$
|
|
40
|
7.9
|
7.9
|
83.3
|
|
|
30-35k$
|
|
36
|
7.1
|
7.1
|
90.5
|
|
|
35-40k$
|
|
17
|
3.4
|
3.4
|
93.8
|
|
|
40-45k$
|
|
9
|
1.8
|
1.8
|
95.6
|
|
|
45-50k$
|
|
22
|
4.3
|
4.4
|
100.0
|
|
|
Total
|
|
504
|
99.6
|
100.0
|
|
|
Missing
|
<blank>
|
|
0
|
0.0
|
|
|
|
|
<NA>
|
|
2
|
0.4
|
|
|
|
|
Total
|
|
506
|
100.0
|
|
|
tab1<-classIntervals(houses$medv,n=8,style="fixed",fixedBreaks=seq(5, 50,by=5))
jenks.tests(tab1)
## # classes Goodness of fit Tabular accuracy
## 9.0000000 0.9760087 0.8179821
Jak widzimy - wskaźnik TAI jest dość wysoki. 0,82 oznacza, że możemy
zaakceptować zaproponowaną konstrukcję tablicy częstości.
##Podstawowe wykresy
hist(medv, breaks="FD", col="green", probability = TRUE,
main="Ceny domów w USA według kryterium dostępu do rzeki")
lines(density(medv[chas=="0"]),col=2)
lines(density(medv[chas=="1"]),col=3)
legend("topright", legend=c("brak dostepu do rzeki", "dostep do rzeki"),
col=c(2,3), lty=1:2, horiz=FALSE, box.lty=0, cex=0.8)

# Density plot of "medv $"
#::::::::::::::::::::::::::::::::::::::
density.p <- ggdensity(houses, x = "medv",
fill = "chas", palette = "jco")+
stat_overlay_normal_density(color = "red", linetype = "dashed")
# Liczymy statystyki wg dostepu:
stable <- desc_statby(houses, measure.var = "medv",
grps = "chas")
stable <- stable[, c("chas", "length", "mean", "sd")]
# Wykres, szablon "medium orange":
stable.p <- ggtexttable(stable, rows = NULL,
theme = ttheme("mOrange"))
# Podpisujemy wykres:
#::::::::::::::::::::::::::::::::::::::
text <- paste("mediana wartości domów zamieszkałych przez właścicieli w 1000$ wedlug dostepu do rzeki",
"Losowa próba 506 domow.",
sep = " ")
text.p <- ggparagraph(text = text, face = "italic", size = 11, color = "black")
# Aranżujemy wykresy na tym samym panelu:
ggarrange(density.p, stable.p, text.p,
ncol = 1, nrow = 3,
heights = c(1, 0.5, 0.3))

plot1 <- ggplot(houses, aes(crim, lstat)) +
geom_abline() +
geom_jitter(width = 0.2, height = 0.2) +
ggtitle("Wskaźnik przestępczości w zależności od status populacji poniżej \nprogu ubóstwa dla obszarów \ngranicznych z rzeka - 1, w przeciwnym wypadku 0") +
theme(plot.title = element_text(hjust = 0.5))
plot1 + facet_wrap(~chas)

ggplot(houses, aes(x=rad, y=medv)) +
geom_boxplot(alpha=0.7) +
stat_summary(fun="mean", geom="point", shape=20, size=5, color="red", fill="red") +
geom_jitter() +
facet_grid(~chas) +
scale_fill_brewer(palette="Set1")

plot1 <- ggplot(houses, aes(medv, chas)) +
geom_abline() +
geom_jitter(width = 0.1, height = 0.1)
plot1 + facet_wrap(~rad)

library(psych)
raport <-
list("mediana wartości domów" =
list("Min" = ~ min(medv),
"Max" = ~ max(medv),
"Q1" = ~ quantile(medv,0.25),
"Mediana" = ~ round(median(medv),2),
"Q3" = ~ quantile(medv,0.75),
"Mean" = ~ round(mean(medv),2),
"Odch. std." = ~ round(sd(medv),2),
"IQR" = ~ round(iqr(medv),2),
"Sx" = ~ round(iqr(medv)/2,2),
"Var %" = ~ round((sd(medv)/mean(medv)),2),
"IQR Var %" = ~ round((iqr(medv)/median(medv)),2),
"Skośność" = ~ round(skew(medv),2),
"Kurtoza" = ~ round(kurtosi(medv),2)
))
tabela<-summary_table(houses, summaries = raport, by = c("rad"))
kbl(tabela,
digits = 2,
caption="Tabela 1. Mediana wartości domów zamieszkałych przez właścicieli w 1000$ przy grupowaniu według indeksu dostępności do autostrad radialnych",
col.names = c('1', '2', '3', '4','5','6','7','8','24'))%>%
kable_classic(full_width = F, html_font = "Cambria")%>%
kable_styling(bootstrap_options = c("striped", "hover"))
Tabela 1. Mediana wartości domów zamieszkałych przez właścicieli w 1000$
przy grupowaniu według indeksu dostępności do autostrad radialnych
|
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
24
|
|
Min
|
11.90
|
15.70
|
14.40
|
7.00
|
11.80
|
16.80
|
17.60
|
16.00
|
5.00
|
|
Max
|
50.00
|
43.80
|
50.00
|
50.00
|
50.00
|
24.80
|
42.80
|
50.00
|
50.00
|
|
Q1
|
20.48
|
21.40
|
21.12
|
17.58
|
19.50
|
18.90
|
24.30
|
23.82
|
11.23
|
|
Mediana
|
22.20
|
23.85
|
26.50
|
20.45
|
23.00
|
21.20
|
26.20
|
28.25
|
14.40
|
|
Q3
|
27.23
|
33.23
|
34.52
|
23.65
|
30.00
|
23.03
|
29.60
|
33.17
|
19.90
|
|
Mean
|
24.37
|
26.83
|
27.93
|
21.39
|
25.71
|
20.98
|
27.11
|
30.36
|
16.40
|
|
Odch. std.
|
8.02
|
7.87
|
8.32
|
6.96
|
9.33
|
2.31
|
6.49
|
9.73
|
8.54
|
|
IQR
|
6.75
|
11.83
|
13.40
|
6.07
|
10.50
|
4.12
|
5.30
|
9.35
|
8.67
|
|
Sx
|
3.38
|
5.91
|
6.70
|
3.04
|
5.25
|
2.06
|
2.65
|
4.67
|
4.34
|
|
Var %
|
0.33
|
0.29
|
0.30
|
0.33
|
0.36
|
0.11
|
0.24
|
0.32
|
0.52
|
|
IQR Var %
|
0.30
|
0.50
|
0.51
|
0.30
|
0.46
|
0.19
|
0.20
|
0.33
|
0.60
|
|
Skośność
|
1.47
|
0.65
|
0.49
|
1.77
|
1.21
|
-0.06
|
0.66
|
0.65
|
2.22
|
|
Kurtoza
|
2.73
|
-0.76
|
-0.44
|
5.38
|
0.79
|
-1.35
|
-0.14
|
-0.77
|
6.46
|
|