Nome:Gennarming__ Cognome:Tatino__ Matricola:_____________
Il file hi-dataset.csv contiene un database in formato CSV organizzato nella convezionale forma tabellare unità \(\times\) features. I dati riguardano la rilevazione Medical Expenditure Panel Survey (MEPS). Il file contiene moltissime features (corrispondenti alle colonne), tra cui:
| Features/Colonne | Descrizione |
|---|---|
| insure | Copertura assicurativa |
| (1=coperto da assicurazione, 0=altrimenti) | |
| COUNTIP | Numero di visite ospedaliere |
| EXPENDIP | Spese per visite ospedaliere |
| COUNTOP | Numero di visite ambulatoriali |
| EXPENDOP | Spese per visite ambulatoriali |
| RACE | Etnia del paziente, descritta da attributi |
| (Asian, Black, Native, White e other) | |
| REGION | Regione del paziente descritta da attributi |
| (WEST, NORTHEAST, MIDWEST and SOUTH) | |
| INCOME | Reddito relativo rispetto alla linea della povertà |
| (POOR, NPOOR, LINCOME, MINCOME and HINCOME) | |
| PHSTAT1 | Autovalutazione dello stato fisico (0=eccellente, |
| 1=molto buono, 2=buono, 3=sufficiente, 4=scarso)) |
Importa i dati in un oggetto data.frame o
tibble chiamato X Indentifica le features che
riportano missing values per una frazione superiore al 30%
delle unità osservate.
Risposta.
X <- read.csv(file = "hi-dataset (1).csv", header = TRUE)
X <- as_tibble(X)
mv <- apply(X, 2, function(x) sum(is.na(x)) / length(x))
colnames(X)[which(mv > 0.3)]
## [1] "INDUSCLASS"
Scrivi il frammento di codice R necessario per: formattare
REGION come fattore; calcolare la sua distribuzione di
frequenze. Che tipo di variabile è REGION? Spiega
brevemente quali sono le visualizzazioni univariate appropriate per
questo tipo di variabili.
Risposta. Sappiamo che REGION: WEST, NORTHEAST, MIDWEST and SOUTH
X$REGION <- factor(X$REGION, levels = c("WEST",
"NORTHEAST",
"MIDWEST",
"SOUTH"))
levels(X$REGION)
## [1] "WEST" "NORTHEAST" "MIDWEST" "SOUTH"
table(X$REGION)
##
## WEST NORTHEAST MIDWEST SOUTH
## 287 137 192 381
table(X$REGION) / nrow(X)
##
## WEST NORTHEAST MIDWEST SOUTH
## 0.2878636 0.1374122 0.1925777 0.3821464
Region è una variabile categoriale, e per visualizzare correttamentre la distribuzione univariata dovremmo utilizzare un barplot o un piechart.
Scrivi un frammento di codice in R per costruire una pipeline che:
PHSTAT1) pari ad eccellente (= 0) oppure
molto buono (= 1)REGION e PHSTAT.Risposta.
X <- X %>%
mutate(PHSTAT1 = ordered(PHSTAT1),
PHSTAT = factor(PHSTAT, levels=c("EXCE",
"VGOO",
"GOOD",
"FAIR",
"POO"), ordered = TRUE))
X2 <- X %>%
filter(PHSTAT1 == 0 | PHSTAT1 == 1)
trimean <- function(x){
Q <- quantile(x, probs = c(0.25,0.5,0.75))
return (Q[1]/4 + Q[2]/2 + Q[3]/4)
}
EXPENDOP_data <- X2 %>%
group_by(REGION, PHSTAT) %>%
summarise(median = median(EXPENDOP),
trimean = trimean(EXPENDOP),
mean_01 = mean(EXPENDOP, trim = .05),
iqr = IQR(EXPENDOP),
mad = mad(EXPENDOP))
EXPENDOP_data
## # A tibble: 8 × 7
## # Groups: REGION [4]
## REGION PHSTAT median trimean mean_01 iqr mad
## <fct> <ord> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 WEST EXCE 70 102. 235. 268. 104.
## 2 WEST VGOO 108. 200. 373. 584. 160.
## 3 NORTHEAST EXCE 65.3 205. 459. 688. 96.9
## 4 NORTHEAST VGOO 307. 410. 801. 847. 456.
## 5 MIDWEST EXCE 194. 391. 896. 1176. 288.
## 6 MIDWEST VGOO 489. 712. 1798. 1768. 725.
## 7 SOUTH EXCE 42.9 93.9 273. 290. 63.6
## 8 SOUTH VGOO 229. 311 521. 739. 340.
Riguardo alla variabile EXPENDOP: 1. ottieni un data set
con le sole osservazioni per cui EXPENDOP>0 2.
identifica i gross-outliers 3. calcola il numero di gross-outliers;
Risposta.
ESXP_0 <- X %>%
filter(EXPENDOP > 0)
all_g0_expepo <- ESXP_0$EXPENDOP
Q <- quantile(all_g0_expepo, probs = c(0.25,0.5,0.75))
k <- 3
IQR <- Q[3] - Q[1]
Hinf <- Q[1] - k*IQR
Hsup <- Q[3] + k*IQR
go <- all_g0_expepo < Hinf | all_g0_expepo > Hsup
all_g0_expepo[go]
## [1] 62811.07 8299.31 6833.13 6795.77 24204.59 29185.94 21754.40 7358.70
## [9] 26071.69 10876.49 16811.20 9535.30 20244.77 14508.63 9371.76 7011.09
## [17] 10897.52 13685.90 19444.68 11597.68 10383.72 8524.21 9489.16 7502.15
## [25] 15111.70 32291.61 9637.04 8316.57 7345.52 10357.10 8628.09 11627.69
## [33] 17385.19 10303.21 11505.33 8305.42
length(all_g0_expepo[go])
## [1] 36
Per la distribuzione di EXPENDOP visualizza i boxplot
paralleli condizionaziotamente a REGION e
PHSTAT1. Usa i colori per condizionare su
REGION. Ripeti lo stesso plot ignorando i gross-outliers
trovati nel punto precendente. Commenta i risultati.
Risposta.
p1 <- ggplot(X, aes(x = PHSTAT1, y = EXPENDOP, fill = REGION))
p1 + geom_boxplot()
X_no_go <- X %>%
filter(EXPENDOP >= Hinf & EXPENDOP <= Hsup)
p2 <- ggplot(X_no_go, aes(x = PHSTAT1, y = EXPENDOP, fill = REGION))
p2 + geom_boxplot()
Con la presenza dei sospetti gross outlines era impossibile la
visualizzazione dei bloxplot. Dopo la rimozione riusciamo a vedere il
bulk dei dati ma è evidente una forte pesantessa di tutte le code destre
della distribuzione di EXPENDOP. Di consequenza, non possiamo pensare ai
dati che abbiamo rimosso come gross outliners o comunque non tutti in
quanto è una caratteristica intriseca di questa distribuzione la
presenza di valori Dx molto lontani dalla media della distribuzione.
Comunque credo che un paio di dati siano d’avvero sospetti outliers ma
non possiamo confermarlo essendo che i dati sono pochi per le
sottocategorie considerate.
Visualizza e studia la relazione tra EXPENDOP e
COUNTOP mediante smoothing lineare. Condiziona su
REGION e PHSTAT1 usando un’opportuna tecnica
(colori, faceting, etc). Commenta brevemente il risultato
Risposta.
p3 <- ggplot(X, aes(x = COUNTOP, y = EXPENDOP))
p3 + geom_point() + geom_smooth(method = "lm")
# considero il dataset senza i sospetti outliers
p3_no_go <- ggplot(X_no_go, aes(x = COUNTOP, y = EXPENDOP))
p3_no_go + geom_point() + geom_smooth(method = "lm")
p4 <- ggplot(X_no_go, aes(x = COUNTOP, y = EXPENDOP, color = PHSTAT1)) + geom_point()
p4 + geom_smooth(method = "lm", se = FALSE) +
facet_wrap(~REGION, scale = "free")
Innanzitutto notiamo che le distribuzioni di
EXPENDOP e
COUNTOP non si può dire che sono indipendenti da
REGION e PHSTAT, ovvero dall’area geografica e
la condizione del paziente. Le distribuzioni delle nostre due variabili
in considerazione cambia a seconda dei vari grafici rappresentati su
video. Notiamo tuttavia che il range di appartenenza dei valori a
ciascuna sottocategoria sono comunque simili, da 0 fino a 60000.
Successivamente, notiamo una pesante massa di dati vicino “all’origine degli assi”, questo rende poco efficace una rappresenazione grafica dei dati approssimabili ad una distribuzione lineare tramite lo smoothing.
Programma la funzione ChIniziale(x) dove x
è un vettore contente stringhe. La funzione deve restituire per ogni
elemento di x la sua lettera iniziale. Suggerimento: la
funzione strsplit() potrebbe essere molto utile. Dopo aver
programmato la funzione applicala per ottenere la lettera iniziale del
nome di tutti i produttori di auto nel campione.
Risposta.
ChIniziale <- function(x) {
x_split <- strsplit(x, split = "")
first_ch <- rep("", length(x))
first_ch <- lapply(x_split, function(x) x[1])
return (as.character(first_ch))
}
#test <- c("ciao", "Porva", "Acchio")
#ChIniziale(test)
ChIniziale(X$RACE)
## [1] "W" "W" "W" "W" "W" "A" "W" "W" "W" "A" "B" "W" "B" "W" "W" "B" "W" "W"
## [19] "W" "W" "A" "W" "W" "B" "W" "W" "B" "W" "W" "W" "A" "B" "W" "W" "W" "W"
## [37] "W" "W" "A" "W" "W" "B" "W" "W" "W" "W" "B" "W" "B" "W" "W" "W" "W" "W"
## [55] "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "O" "W" "W"
## [73] "W" "W" "W" "B" "W" "B" "W" "W" "B" "W" "W" "W" "W" "W" "W" "A" "W" "W"
## [91] "W" "W" "W" "W" "W" "W" "W" "W" "A" "B" "W" "W" "W" "W" "W" "W" "W" "A"
## [109] "W" "W" "W" "W" "W" "W" "W" "A" "B" "B" "W" "W" "W" "W" "W" "W" "B" "W"
## [127] "B" "W" "W" "W" "W" "W" "W" "W" "W" "B" "B" "W" "W" "A" "B" "W" "W" "W"
## [145] "W" "W" "W" "W" "W" "N" "W" "W" "W" "O" "B" "W" "W" "B" "W" "W" "W" "W"
## [163] "O" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "B" "B" "W" "B" "W" "W"
## [181] "W" "W" "W" "A" "W" "W" "W" "B" "W" "W" "W" "W" "B" "B" "W" "W" "W" "W"
## [199] "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W"
## [217] "W" "W" "W" "W" "W" "B" "W" "W" "W" "W" "B" "W" "W" "W" "B" "B" "B" "W"
## [235] "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "B" "W" "N" "W" "W" "W" "W" "W"
## [253] "W" "W" "W" "B" "B" "W" "W" "W" "W" "W" "W" "W" "W" "W" "A" "W" "W" "A"
## [271] "B" "B" "W" "W" "A" "B" "W" "W" "B" "W" "B" "W" "W" "B" "W" "W" "W" "B"
## [289] "W" "W" "B" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "A" "W" "W" "W" "W"
## [307] "W" "W" "W" "W" "W" "W" "W" "W" "W" "B" "W" "W" "B" "W" "A" "A" "A" "W"
## [325] "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "O" "W" "W" "W" "B" "B"
## [343] "W" "W" "W" "W" "N" "W" "W" "W" "W" "W" "W" "W" "W" "W" "N" "W" "W" "B"
## [361] "A" "W" "W" "W" "W" "W" "W" "B" "W" "W" "N" "B" "A" "W" "B" "W" "W" "W"
## [379] "W" "W" "W" "W" "A" "W" "W" "W" "W" "W" "B" "W" "W" "W" "W" "W" "W" "W"
## [397] "W" "W" "O" "W" "B" "A" "W" "B" "W" "W" "O" "B" "W" "W" "W" "W" "B" "W"
## [415] "W" "W" "W" "W" "W" "W" "B" "A" "B" "W" "W" "W" "W" "W" "W" "B" "W" "W"
## [433] "W" "W" "W" "O" "O" "W" "W" "A" "W" "W" "W" "W" "B" "W" "W" "W" "W" "W"
## [451] "B" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "B" "B" "W"
## [469] "W" "W" "W" "W" "W" "W" "W" "W" "B" "A" "W" "W" "B" "A" "W" "B" "W" "W"
## [487] "W" "B" "B" "W" "W" "N" "O" "W" "W" "W" "W" "W" "W" "B" "W" "W" "W" "B"
## [505] "W" "W" "W" "B" "B" "W" "W" "W" "B" "W" "W" "W" "W" "B" "W" "W" "W" "W"
## [523] "W" "W" "W" "W" "W" "W" "W" "W" "N" "W" "W" "W" "W" "B" "W" "W" "W" "W"
## [541] "W" "W" "B" "W" "W" "W" "A" "W" "W" "W" "W" "B" "W" "W" "W" "W" "B" "W"
## [559] "W" "B" "W" "A" "B" "B" "N" "W" "W" "W" "W" "W" "W" "W" "W" "W" "O" "W"
## [577] "W" "W" "W" "W" "W" "B" "W" "W" "W" "W" "W" "W" "B" "W" "W" "A" "B" "W"
## [595] "W" "W" "W" "W" "W" "W" "W" "A" "W" "W" "B" "B" "W" "W" "O" "W" "W" "W"
## [613] "B" "W" "W" "W" "W" "W" "A" "B" "W" "W" "W" "B" "W" "O" "W" "W" "W" "B"
## [631] "W" "W" "W" "W" "W" "W" "A" "W" "W" "B" "B" "W" "W" "W" "W" "W" "W" "W"
## [649] "W" "W" "W" "W" "B" "A" "O" "W" "B" "B" "B" "W" "W" "W" "W" "W" "W" "B"
## [667] "W" "W" "W" "W" "W" "W" "W" "W" "W" "B" "W" "W" "W" "W" "B" "W" "W" "W"
## [685] "W" "W" "A" "W" "W" "W" "W" "B" "W" "W" "W" "W" "W" "W" "W" "A" "W" "B"
## [703] "W" "A" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "B" "B" "B" "W" "W"
## [721] "W" "W" "W" "W" "W" "W" "B" "W" "W" "W" "W" "W" "W" "B" "W" "W" "W" "W"
## [739] "B" "W" "W" "B" "W" "W" "W" "W" "W" "A" "W" "B" "W" "W" "W" "B" "B" "W"
## [757] "W" "W" "W" "W" "W" "W" "W" "W" "B" "A" "W" "O" "W" "B" "W" "W" "W" "W"
## [775] "O" "W" "W" "B" "B" "W" "W" "W" "W" "W" "W" "W" "A" "W" "W" "W" "W" "W"
## [793] "W" "O" "W" "W" "W" "W" "W" "W" "W" "W" "B" "W" "B" "W" "W" "W" "W" "A"
## [811] "B" "W" "W" "W" "W" "W" "W" "B" "B" "B" "W" "W" "B" "B" "W" "W" "W" "W"
## [829] "B" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "B" "W" "W"
## [847] "W" "W" "W" "W" "A" "W" "W" "W" "W" "B" "W" "W" "O" "W" "W" "W" "B" "W"
## [865] "A" "W" "W" "W" "W" "W" "W" "B" "W" "W" "W" "W" "W" "W" "W" "O" "B" "W"
## [883] "W" "W" "W" "W" "W" "B" "W" "O" "W" "A" "W" "W" "W" "W" "W" "W" "B" "W"
## [901] "W" "W" "N" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "B" "W"
## [919] "B" "A" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "W" "B" "W"
## [937] "A" "O" "A" "B" "W" "W" "W" "W" "W" "W" "A" "W" "W" "W" "W" "W" "W" "B"
## [955] "W" "W" "W" "B" "W" "W" "W" "W" "W" "W" "W" "W" "B" "B" "W" "B" "A" "W"
## [973] "W" "B" "W" "W" "W" "W" "W" "B" "W" "O" "A" "W" "B" "W" "W" "W" "W" "W"
## [991] "B" "W" "B" "W" "W" "W" "B"