Hoe u invloedrijke gegevenspunten kunt identificeren met behulp van de afstand van cook
De afstand van Cook , vaak aangeduid als Di , wordt gebruikt bij regressieanalyse om invloedrijke gegevenspunten te identificeren die een negatief effect kunnen hebben op uw regressiemodel.
De formule voor Cook’s afstand is:
d ik = ( ri 2 / p*MSE) * (h ii / (1-h ii ) 2 )
Goud:
- ri is het i – de residu
- p is het aantal coëfficiënten in het regressiemodel
- MSE is de gemiddelde kwadratische fout
- h ii is de i-de hefboomwaarde
Hoewel de formule een beetje ingewikkeld lijkt, is het goede nieuws dat de meeste statistische software deze eenvoudig voor u kunnen berekenen.
In wezen doet de afstand van Cook één ding: hij meet hoeveel alle aangepaste waarden van het model veranderen wanneer het i -de gegevenspunt wordt verwijderd.
Een datapunt dat een hoge waarde heeft voor de afstand van Cook geeft aan dat dit de gepaste waarden sterk beïnvloedt. Een algemene regel is dat elk punt met een Cook-afstand groter dan 4/n ( waarbij n het totale aantal gegevenspunten is ) als een uitbijter wordt beschouwd.
Het is belangrijk op te merken dat de afstand van Cook vaak wordt gebruikt om invloedrijke datapunten te identificeren . Het feit dat een datapunt van invloed is, betekent niet noodzakelijkerwijs dat het moet worden verwijderd. U moet eerst controleren of het datapunt eenvoudigweg verkeerd is vastgelegd of dat er iets vreemds aan het datapunt is dat op een interessante bevinding zou kunnen duiden.
Hoe de Cook’s afstand in R te berekenen
Het volgende voorbeeld illustreert hoe u de afstand van Cook in R kunt berekenen.
Eerst laden we twee bibliotheken die we nodig hebben voor dit voorbeeld:
library(ggplot2) library(gridExtra)
Vervolgens zullen we twee dataframes definiëren: één met twee uitbijters en één zonder uitbijters.
#create data frame with no outliers no_outliers <- data.frame(x = c(1, 2, 2, 3, 4, 5, 7, 3, 2, 12, 11, 15, 14, 17, 22), y = c(22, 23, 24, 23, 19, 34, 35, 36, 36, 34, 32, 38, 41, 42, 44)) #create data frame with two outliers outliers <- data.frame(x = c(1, 2, 2, 3, 4, 5, 7, 3, 2, 12, 11, 15, 14, 17, 22), y = c( 190 , 23, 24, 23, 19, 34, 35, 36, 36, 34, 32, 38, 41, 42, 180 ))
Vervolgens maken we een spreidingsdiagram om de twee gegevensframes naast elkaar weer te geven:
#create scatterplot for data frame with no outliers no_outliers_plot <- ggplot(data = no_outliers, aes(x = x, y = y)) + geom_point() + geom_smooth(method = lm) + ylim(0, 200) + ggtitle("No Outliers") #create scatterplot for data frame with outliers outliers_plot <- ggplot(data = outliers, aes(x = x, y = y)) + geom_point() + geom_smooth(method = lm) + ylim(0, 200) + ggtitle("With Outliers") #plot the two scatterplots side by side gridExtra::grid.arrange(no_outliers_plot, outliers_plot, ncol=2)
In de tweede grafiek kunnen we zien hoe uitbijters de fit van de regressielijn negatief beïnvloeden.
Om invloedrijke punten in de tweede dataset te identificeren, kunnen we de Cook-afstand voor elke waarneming in de dataset berekenen en vervolgens deze afstanden uitzetten om te zien welke waarnemingen boven de traditionele drempel van 4/n liggen:
#fit the linear regression model to the dataset with outliers model <- lm(y ~ x, data = outliers) #find Cook's distance for each observation in the dataset cooksD <- cooks.distance(model) # Plot Cook's Distance with a horizontal line at 4/n to see which observations #exceed this threshold n <- nrow(outliers) plot(cooksD, main = "Cooks Distance for Influential Obs") abline(h = 4/n, lty = 2, col = "steelblue") # add cutoff line
We kunnen duidelijk zien dat de eerste en laatste waarneming in de dataset de drempel van 4/n overschrijden. We zouden deze twee observaties dus identificeren als invloedrijke datapunten die een negatieve invloed hebben op het regressiemodel.
Als we alle waarnemingen willen verwijderen die de 4/n-drempel overschrijden, kunnen we dat doen met behulp van de volgende code:
#identify influential points influential_obs <- as.numeric(names(cooksD)[(cooksD > (4/n))]) #define new data frame with influential points removed outliers_removed <- outliers[-influential_obs, ]
Vervolgens kunnen we twee spreidingsdiagrammen vergelijken: de ene toont de regressielijn met de aanwezige invloedspunten en de andere toont de regressielijn met de verwijderde invloedspunten:
#create scatterplot with outliers present outliers_present <- ggplot(data = outliers, aes(x = x, y = y)) + geom_point() + geom_smooth(method = lm) + ylim(0, 200) + ggtitle("Outliers Present") #create scatterplot with outliers removed outliers_removed <- ggplot(data = outliers_removed, aes(x = x, y = y)) + geom_point() + geom_smooth(method = lm) + ylim(0, 200) + ggtitle("Outliers Removed") #plot both scatterplots side by side gridExtra::grid.arrange(outliers_present, outliers_removed, ncol = 2)
We kunnen duidelijk zien hoeveel beter de regressielijn bij de gegevens past zodra de twee invloedrijke gegevenspunten zijn verwijderd.
Technische opmerkingen
- De meeste statistische software heeft de mogelijkheid om eenvoudig de Cook’s afstand te berekenen voor elke waarneming in een dataset.
- Houd er rekening mee dat Cook’s Distance eenvoudigweg een manier is om invloedspunten te identificeren .
- Er zijn veel manieren om met invloedrijke punten om te gaan , waaronder: deze punten verwijderen, deze punten vervangen door een waarde zoals het gemiddelde of de mediaan, of eenvoudigweg de punten in het model behouden, maar er zorgvuldig rekening mee houden bij het rapporteren van de regressieresultaten.