Een qq-plot maken en interpreteren in r
Een QQ-plot , een afkorting van „quantile-quantile“, is een type plot dat we kunnen gebruiken om te bepalen of een dataset mogelijk afkomstig is van een theoretische distributie.
Veel statistische tests gaan ervan uit dat een dataset een normale verdeling volgt, en vaak wordt een QQ-plot gebruikt om te beoordelen of aan deze veronderstelling wordt voldaan.
Hoewel een QQ-plot geen formele statistische test is, biedt het een eenvoudige manier om visueel te controleren of een dataset een normale verdeling volgt en, zo niet, hoe deze aanname wordt geschonden en welke datapunten mogelijk aan de oorsprong van deze schending liggen.
We kunnen een QQ-plot maken door twee sets kwantielen tegen elkaar uit te zetten. Als beide sets kwantielen uit dezelfde verdeling komen, moeten de punten op de grafiek grofweg een rechte diagonale lijn vormen.
Kwantielen vertegenwoordigen punten in een dataset waaronder een bepaald deel van de gegevens ligt. Kwantiel 0,9 vertegenwoordigt bijvoorbeeld het punt waaronder 90% van de gegevens valt. Het 0,5-kwantiel vertegenwoordigt het punt waaronder 50% van de gegevens ligt, enzovoort.
QQ-plots identificeren de kwantielen van uw gegevensmonsters en vergelijken deze met de kwantielen van een theoretische verdeling. In de meeste gevallen wordt de normale verdeling gebruikt, maar feitelijk kan voor elke theoretische verdeling een QQ-plot worden gemaakt.
Als de datapunten in een QQ-plot langs een rechte diagonale lijn liggen, volgt de dataset waarschijnlijk een normale verdeling.
Hoe maak je een QQ-plot in R
We kunnen eenvoudig een QQ-plot maken om te controleren of een dataset een normale verdeling volgt met behulp van de ingebouwde qqnorm()- functie.
De volgende code genereert bijvoorbeeld een vector van 100 willekeurige waarden die een normale verdeling volgt en creëert een QQ-plot voor die dataset om te verifiëren dat deze inderdaad een normale verdeling volgt:
#make this example reproducible set.seed(11) #generate vector of 100 values that follows a normal distribution data <- rnorm(100) #create QQ plot to compare this dataset to a theoretical normal distribution qqnorm(data)
Om het nog gemakkelijker te maken om te zien of de gegevens een rechte lijn volgen, kunnen we de functie qqline() gebruiken:
#create QQ plot qqnorm(data) #add straight diagonal line to plot qqline(data)
We kunnen zien dat de gegevenspunten bij de staarten niet precies de rechte lijn volgen, maar voor het grootste deel lijken deze voorbeeldgegevens normaal verdeeld te zijn (zoals ze zouden moeten zijn omdat we R hebben gevraagd om de gegevens te genereren op basis van een normale verdeling ). ).
Overweeg in plaats daarvan de volgende code die een vector van 100 willekeurige waarden genereert die een gammaverdeling volgt en een QQ-plot voor deze gegevens maakt om te controleren of deze een normale verdeling volgt:
#make this example reproducible set.seed(11) #generate vector of 100 values that follows a gamma distribution data <- rgamma(100, 1) #create QQ plot to compare this dataset to a theoretical normal distribution qqnorm(data) qqline(data)
We kunnen in deze QQ-grafiek een duidelijke afwijking van de rechte lijn zien, wat aangeeft dat deze dataset waarschijnlijk geen normale verdeling volgt.
Beschouw een ander stukje code dat een vector van 100 willekeurige waarden genereert die een Chi-kwadraatverdeling met 5 vrijheidsgraden volgt en een QQ-plot voor deze gegevens creëert om te controleren of deze een normale verdeling volgt:
#make this example reproducible set.seed(11) #generate vector of 100 values that follows a Chi-Square distribution data <- rchisq(100, 5) #create QQ plot to compare this dataset to a theoretical normal distribution qqnorm(data) qqline(data)
Opnieuw kunnen we zien dat deze dataset geen normale verdeling lijkt te volgen, vooral niet in de buurt van de staarten.
Verander de esthetiek van een QQ-plot in R
We kunnen een aantal esthetiek van de QQ-plot in R veranderen, inclusief de titel, aslabels, gegevenspuntkleuren, lijnkleur en lijnbreedte.
De volgende code wijzigt de titels, aslabels en kleur van plotpunten:
#make this example reproducible set.seed(11) #generate vector of 100 values that follows a normal distribution data <- rnorm(100) #create QQ plot qqnorm(data, main = 'QQ Plot for Normality', xlab = 'Theoretical Dist', ylab = 'Sample dist', col = 'steelblue')
Vervolgens voegt de volgende code een rechte diagonale lijn toe aan de plot met een rode kleur, een lijnbreedte van 2 (lwd = 2, standaard is 1) en een stippellijn (lty = 2, standaard is 1):
qqline(data, col = 'red', lwd = 2, lty = 2)
Technische opmerkingen
Houd er rekening mee dat een QQ-plot eenvoudigweg een manier is om visueel te controleren of een dataset een theoretische verdeling volgt. Om formeel te testen of een dataset een bepaalde verdeling volgt, kunnen de volgende tests worden uitgevoerd (ervan uitgaande dat u uw dataset vergelijkt met een normale verdeling):
Anderson-Darling-test
Shapiro-Wilk-test
Kolmogorov-Smirnov-test