Het visueel verkennen van een dataset wordt vooraf gegaan door een inhoudelijke verkenning van de data. Wat zit er in de set? Wat is de context van de gegevens uit de set? Zijn er zaken die moeten worden opgeschoond of verwijderd? Zijn er lege cellen?
De dataset is afkomstig van Kaggle.com
Deze dataset wordt gebruikt om te voorspellen of een patiënt waarschijnlijk/mogelijk een beroerte krijgt op basis van invoerparameters zoals geslacht, leeftijd, verschillende ziekten, rookstatus en woongebied *stedelijk of landelijk).
Attribuutinformatie (aangepast/opgeschoond):
In de oorspronkelijke dataset is “stroke” gebruikt als een overkoepelende term voor zowel een herseninfarct als een hersenbloeding.
Glucosegehalte is de hoeveelheid glucose (suiker) die in het bloed zit (patiënt is nuchter).
Bij een bloedsuikerwaarde:
onder de 6,1 mmol/l - geen diabetes (in de dataset 55 -108)
tussen de 6,1 en 6,9 mmol/l - voorstadium van diabetes (in de dataset 108 -125 )
boven de 6,9 mmol/l - diabetes (in de dataset >125)
In de dataset worden de gemiddelden waarden gegeven (55- 272).
Jongeren beneden 18 jaar zijn weggelaten uit de dataset. Zij worden met andere waarden (formule/berekeningen) ingedeeld bij de Body Mass Index, dat maakt ze onvergelijkbaar met de 18+ patiënten uit de dataset.
BMI is de verhouding van een (gezond) gewicht en de lengte van een persoon.
BMI grenzen (waarden):
Lager dan 18,5 = Ondergewicht
Vanaf 18,5 tot 25 = Gezond gewicht
Vanaf 25 tot 30 = Overgewicht
30 en hoger = Ernstig overgewicht (obesitas)
library(readxl)
herseninfarctdataset18jaar <- read_excel("herseninfarctdataset18jaar.xlsx")
#View(herseninfarctdataset18jaar)
data <- herseninfarctdataset18jaar
print(data)
## # A tibble: 4,158 × 11
## Geslacht Leeftijd Hypertensie Hartziekte `Ooit Getrouwd` Werktype Woontype
## <chr> <dbl> <dbl> <dbl> <chr> <chr> <chr>
## 1 Vrouw 21 0 0 Nee Particulier Landeli…
## 2 Man 42 0 0 Ja Particulier Stedeli…
## 3 Man 66 0 0 Ja Zelfstandi… Landeli…
## 4 Man 20 0 0 Nee Particulier Stedeli…
## 5 Man 61 0 0 Ja Particulier Landeli…
## 6 Vrouw 31 0 0 Ja Overheidsb… Landeli…
## 7 Vrouw 39 0 0 Ja Particulier Stedeli…
## 8 Man 78 0 0 Ja Zelfstandi… Stedeli…
## 9 Vrouw 55 0 0 Ja Particulier Stedeli…
## 10 Vrouw 55 0 0 Ja Particulier Stedeli…
## # ℹ 4,148 more rows
## # ℹ 4 more variables: GemSuikerspiegel <dbl>, BMI <dbl>, Rookstatus <chr>,
## # HersenInfarct <dbl>
summary(data)
## Geslacht Leeftijd Hypertensie Hartziekte
## Length:4158 Min. :18.00 Min. :0.0000 Min. :0.0000
## Class :character 1st Qu.:36.00 1st Qu.:0.0000 1st Qu.:0.0000
## Mode :character Median :51.00 Median :0.0000 Median :0.0000
## Mean :50.33 Mean :0.1152 Mean :0.0659
## 3rd Qu.:64.00 3rd Qu.:0.0000 3rd Qu.:0.0000
## Max. :82.00 Max. :1.0000 Max. :1.0000
## Ooit Getrouwd Werktype Woontype GemSuikerspiegel
## Length:4158 Length:4158 Length:4158 Min. : 55.12
## Class :character Class :character Class :character 1st Qu.: 77.45
## Mode :character Mode :character Mode :character Median : 92.36
## Mean :108.24
## 3rd Qu.:115.90
## Max. :271.74
## BMI Rookstatus HersenInfarct
## Min. :14.10 Length:4158 Min. :0.00000
## 1st Qu.:25.50 Class :character 1st Qu.:0.00000
## Median :29.20 Mode :character Median :0.00000
## Mean :29.93 Mean :0.05916
## 3rd Qu.:33.50 3rd Qu.:0.00000
## Max. :48.90 Max. :1.00000
str(data)
## tibble [4,158 × 11] (S3: tbl_df/tbl/data.frame)
## $ Geslacht : chr [1:4158] "Vrouw" "Man" "Man" "Man" ...
## $ Leeftijd : num [1:4158] 21 42 66 20 61 31 39 78 55 55 ...
## $ Hypertensie : num [1:4158] 0 0 0 0 0 0 0 0 0 0 ...
## $ Hartziekte : num [1:4158] 0 0 0 0 0 0 0 0 0 0 ...
## $ Ooit Getrouwd : chr [1:4158] "Nee" "Ja" "Ja" "Nee" ...
## $ Werktype : chr [1:4158] "Particulier" "Particulier" "Zelfstandige" "Particulier" ...
## $ Woontype : chr [1:4158] "Landelijk" "Stedelijk" "Landelijk" "Stedelijk" ...
## $ GemSuikerspiegel: num [1:4158] 55.1 55.2 55.2 55.2 55.3 ...
## $ BMI : num [1:4158] 21.8 27 28.9 20.4 33.2 32.5 31.5 29.6 27.1 24.8 ...
## $ Rookstatus : chr [1:4158] "Nooit gerookt" "Nooit gerookt" "Onbekend" "Nooit gerookt" ...
## $ HersenInfarct : num [1:4158] 0 0 0 0 0 0 0 0 0 0 ...
Figuur 2. Kleurpalet.
##
## The decimal point is at the |
##
## 14 | 12
## 15 | 07
## 16 | 001467799
## 17 | 0113334666667999
## 18 | 123333455667777888
## 19 | 1112222223333444444445555555666777788888888889999
## 20 | 00000001111111111112222222222233333334444444444444455555555555666666+11
## 21 | 00000000000001111111111112222222223333333333333444444444444444444555+50
## 22 | 00000000000011111111111111111111222222222222222222222222222333333333+75
## 23 | 00000000000000000000001111111111111111112222222222222223333333333333+115
## 24 | 00000000000000000000000011111111111111111111111111222222222222222222+149
## 25 | 00000000000000000000000001111111111111111111111111111111222222222222+140
## 26 | 00000000000000000000000001111111111111111111111111111111111222222222+206
## 27 | 00000000000000000000000000000000000111111111111111111111111112222222+210
## 28 | 00000000000000000000000000000000011111111111111111111111111111111222+232
## 29 | 00000000000000000000000000000111111111111111111111111111111112222222+211
## 30 | 00000000000000000000000000000000000001111111111111111111111111111111+185
## 31 | 00000000000000000000001111111111111111111111111222222222222222222222+165
## 32 | 00000000000000000000001111111111111111111111111112222222222222222222+135
## 33 | 00000000000000011111111111111111111111112222222222222222222333333333+96
## 34 | 00000000000000111111111111111222222222222222233333333333333333444444+77
## 35 | 00000000000111111112222222222222222333333333333444444444555555555555+58
## 36 | 00000000000111111122222222222233333333333334444444444555566666666666+27
## 37 | 00000000001111111222222222333333333333444444444445555555556666666667+14
## 38 | 00000000000111111111122222222233444444555555566666666677777777788888+1
## 39 | 00000001111111122222222233333344444444445555555566666666677777777888
## 40 | 00000011111111122222222233333333444444444555555678888888999999
## 41 | 0001111112222222233333444555555556666677777888888888899999
## 42 | 000111222222233333444445566667777888999
## 43 | 00000011112222333334444446666777777788888888899999999
## 44 | 00001222233345555667777788889
## 45 | 000001122233334444555577899
## 46 | 0000112234556899
## 47 | 1334555666889
## 48 | 0123345578999
Figuur 4.Een Stem and Leaf Plot of Stam- en Bladplotdiagram. Hoe moet deze visualisatie gelezen worden? De waarde links van de verticale lijn 14|12 is de BMI waarde als geheel getal, na de lijn is het getal achter de “komma”. Dus er is een waarde 14,1 en 14,2.
Figuur 5. 4158 Personen in de dataset.
Figuur 6. Verzameling Mannen en Vrouwen.
Figuur 7. BMI waarden indeling,
De categorie “Gezond Gewicht” bevat minder personen, dan de categorie “Overgewicht” en “Obesitas”.
Figuur 8. Verdeling van het aantal mannen en vrouwen in de dataset.
library(readxl)
herseninfarctdataset18jaar <- read_excel("herseninfarctdataset18jaar.xlsx")
#View(herseninfarctdataset18jaar)
data <- herseninfarctdataset18jaar
#library(dplyr)
par(las=1,bty="n")
hist(data$Leeftijd,labels=TRUE,breaks=3,ylim=c(0,1600),main= "Histogram met de Spreiding van Leeftijden (18 - 82 jaar)",
adj=0,col="#A4776450",ylab="Aantal Mensen", xlab="Leeftijd",xlim=c(0,100),yaxt="n",border="#A4776405")
rug(data$Leeftijd,col="#ff33a6",lwd=2)
Figuur 9. Histogram met leeftijdsgroepen.
library(readxl)
herseninfarctdataset18jaar <- read_excel("herseninfarctdataset18jaar.xlsx")
#View(herseninfarctdataset18jaar)data <- herseninfarctdataset18jaar
library(dplyr)
histPercentage<-function(x,...) {
H<-hist(x,plot=FALSE)
H$density<-with(H,100 * density*diff(breaks)[1])
labs<-paste(round(H$density), "%",sep="")
plot(H,freq=FALSE, labels=labs, ylim=c(0,1.08*max(H$density)),...)
}
par(las=1,bty="n")
histPercentage(data$Leeftijd,col="#A4776450",main="Histogram met het percentage mensen per leeftijdsgroep",adj=0,
,ylab="", xlab="Leeftijd in jaren",border="#A4776405",yaxt="n",
xaxp=c(0,100,10))
rug(data$Leeftijd,col="#ff33a6",lwd=2) # toont de datapunten
Figuur 10. Histogram met percentages leeftijdsgroepen.
par(las=1,bty="n")
hist(data$BMI,col="#A4776450",main="Histogram met BMI waarden",adj=0,
,ylab="", xlab="BMI waarden",yaxt="n",border="#33A8FF05",
xaxp=c(0,100,50))
Figuur 11.Histogram van BMI waarden
par(las=1,bty="n")
hist(data$BMI,main="Histogram en dichtheidsdiagram met BMI-waarde",adj=0,col="#A4776450",freq=FALSE,border="#33A8FF05")
rug(data$BMI,col="#ff33a6")
dx<-density(data$BMI)
lines(dx,lwd=2,col="#ff33a6")
Figuur 12. Standaard Histogram gecombineerd met een dichtheidsdiagram
par(mfrow=c(1,2), bty="n")
stripchart(herseninfarctdataset18jaar$BMI, method = "jitter", col = "#A4776450",
vertical = FALSE, pch = 19,cex=0.5,main="BMI waarden.")
stripchart(herseninfarctdataset18jaar$GemSuikerspiegel, method = "jitter", col = "#A4776450",
vertical = FALSE, pch = 19,cex=0.5,main="Gemiddelde Suikerspiegel.")
Figuur 13. Stripdiagrammen van de BMI waarden en de Gemiddelde Suikerspiegel.
Een stripchart is een spreidingsdiagram met één variabele.
library(readxl)
herseninfarctdataset18jaar <- read_excel("herseninfarctdataset18jaar.xlsx")
#View(herseninfarctdataset18jaar)
bmi_categories<- cut(herseninfarctdataset18jaar$BMI,breaks = c(-Inf, 18.5, 25, 30, Inf), labels = c("<18.5", "18.5-25", "25-30", ">30"))
bmi_frequencies <- table(bmi_categories)
print(bmi_frequencies)
## bmi_categories
## <18.5 18.5-25 25-30 >30
## 38 883 1411 1826
knitr::include_graphics("BMIwaarden.png")
library(readxl)
herseninfarctdataset18jaar <- read_excel("herseninfarctdataset18jaar.xlsx")
#View(herseninfarctdataset18jaar)
#library(ContourFunctions)
x=(herseninfarctdataset18jaar$BMI)
y=(herseninfarctdataset18jaar$GemSuikerspiegel)
par(las=1,bty="n")
plot(x, y, main="Spreidingsdiagram van BMI waarde en\nGemiddelde Suikerspiegel",adj=0,ylim=c(50,300),
xlab="BMI-waarde", ylab="Gemiddelde Suikerspiegel",cex=2,
pch=19, col="#A4776450",)
# Toevoegen van een regressielijn
# abline(lm(y ~ x), col="#9a33fe", lwd=2)
abline(lm(y ~ x), col="#3285ff", lwd=2)
Figuur 15. Spreidingsdiagram: Samenhang (zwakke positieve) tussen BMI en Gemiddelde Suikerspiegel.
correlatie_spearman <-cor(herseninfarctdataset18jaar$BMI,herseninfarctdataset18jaar$GemSuikerspiegel,method="spearman")
#print(correlatie_spearman)
print(paste("De correlatie tussen BMI en de Gemiddelde Suikerspiegel is:", correlatie_spearman))
## [1] "De correlatie tussen BMI en de Gemiddelde Suikerspiegel is: 0.118738557927454"
Dit levert een zwakke positieve relatie op. Het ligt dicht bij 0, er bestaat vrijwel geen lineaire relatie tussen de variabelen. Ook als je de samenhang berekent van leeftijd, BMI waarde en Gemiddelde Suikerspiegel. In alle gevallen is er slechts sprake van een zwakke samenhang.
De mozaïekplot is de grafische weergave van een kruistabel. En een uitbreiding van een stapeldiagram. Twee (kwalitatieve) variabelen worden met elkaar gekruist. De dikte en de hoogte van de stroken (segmenten) zijn evenredig met de aantallen in de bijhorende categorieën. Vaak gebruikt om “deel van een geheel” weer te geven.
library(readxl)
herseninfarctdataset18jaar <- read_excel("herseninfarctdataset18jaar.xlsx")
#View(herseninfarctdataset18jaar)
data <- data.frame(
group = c(herseninfarctdataset18jaar$Geslacht),
value = c(herseninfarctdataset18jaar$BMI)
)
data$group <- as.factor(data$group)
data$value <- as.numeric(data$value)
par(las=1)
mosaic_data <- table(data$group, data$value < 25) # gezond gewicht
mosaicplot(mosaic_data, main="BMI waarden lager dan 25 en Geslacht", xlab="Geslacht",
ylab="BMI waarde lager dan 25", color=TRUE)
Figuur 16. Mozaïekplot (marimekko chart).
knitr::include_graphics("Rplot04.png")
R levert hier een te
verbeteren grafiek op. De tweede versie van figuur 16 is beter
(overzichtelijker) en van duidelijke annotatie voorzien.
infarctdataset18jaar <- read_excel("herseninfarctdataset18jaar.xlsx")
#View(herseninfarctdataset18jaar)
library(vioplot)
par(las=1,bty="n")
vioplot(herseninfarctdataset18jaar$BMI,col = "#33c3ff50", main="Violinplot BMI waarden",
border = "NA", colMed = "#33c3ff", pchMed = 16,horizontal=FALSE,pch=19)
Figuur 17.Violinplot ( boxplot-variant).