Cook mesafesini kullanarak etkili veri noktaları nasıl belirlenir?
Çoğunlukla D i olarak gösterilen Cook mesafesi , regresyon modelinizi olumsuz yönde etkileyebilecek etkili veri noktalarını tanımlamak için regresyon analizinde kullanılır.
Cook mesafesinin formülü:
d ben = (r i 2 / p*MSE) * (h ii / (1-h ii ) 2 )
Altın:
- r i i’inci kalıntıdır
- p , regresyon modelindeki katsayıların sayısıdır
- MSE ortalama kare hatasıdır
- h ii i’inci kaldıraç değeridir
Formül biraz karmaşık görünse de iyi haber şu ki çoğu istatistik yazılımı bunu sizin için kolayca hesaplayabilir.
Cook’un mesafesi esasen tek bir şey yapar: i’inci veri noktası kaldırıldığında modelin tüm uydurulmuş değerlerinin ne kadar değiştiğini ölçer.
Cook mesafesi için yüksek bir değere sahip bir veri noktası, bunun uygun değerleri güçlü bir şekilde etkilediğini gösterir. Genel bir kural, Cook mesafesi 4/n’den büyük olan herhangi bir noktanın ( burada n, toplam veri noktası sayısıdır ) aykırı değer olarak kabul edilmesidir.
Cook mesafesinin genellikle etkili veri noktalarını tanımlamak için kullanıldığını unutmamak önemlidir. Bir veri noktasının etkili olması onun mutlaka kaldırılması gerektiği anlamına gelmez. Öncelikle veri noktasının yanlış kaydedilip kaydedilmediğini veya veri noktasında ilginç bir bulguya işaret edebilecek tuhaf bir şey olup olmadığını kontrol etmelisiniz.
R’de Cook’un mesafesi nasıl hesaplanır
Aşağıdaki örnek Cook’un mesafesinin R cinsinden nasıl hesaplanacağını göstermektedir.
Öncelikle bu örnek için ihtiyaç duyacağımız iki kütüphaneyi yükleyeceğiz:
library(ggplot2) library(gridExtra)
Daha sonra iki veri çerçevesi tanımlayacağız: biri iki aykırı değer içeren ve diğeri aykırı olmayan.
#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 ))
Daha sonra, iki veri çerçevesini yan yana görüntülemek için bir dağılım grafiği oluşturacağız:
#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)
Aykırı değerlerin regresyon çizgisinin uyumunu nasıl olumsuz etkilediğini ikinci grafikte görebiliriz.
İkinci veri kümesindeki etkili noktaları belirlemek için, veri kümesindeki her gözlem için Cook mesafesini hesaplayabilir ve ardından hangi gözlemlerin geleneksel 4/n eşiğinin üzerinde olduğunu görmek için bu mesafeleri çizebiliriz:
#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
Veri setindeki ilk ve son gözlemin 4/n eşiğini aştığını açıkça görebiliyoruz. Dolayısıyla bu iki gözlemi, regresyon modelini olumsuz yönde etkileyen etkili veri noktaları olarak tanımlayacağız.
4/n eşiğini aşan tüm gözlemleri kaldırmak istiyorsak bunu aşağıdaki kodu kullanarak yapabiliriz:
#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, ]
Daha sonra iki dağılım grafiğini karşılaştırabiliriz: biri mevcut etki noktalarıyla birlikte regresyon çizgisini gösterir, diğeri ise etki noktaları kaldırılmış olarak regresyon çizgisini gösterir:
#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)
İki etkili veri noktası kaldırıldığında regresyon çizgisinin verilere ne kadar iyi uyduğunu açıkça görebiliriz.
Teknik notlar
- Çoğu istatistiksel yazılım, bir veri setindeki her gözlem için Cook’un mesafesini kolayca hesaplama yeteneğine sahiptir.
- Cook’s Distance’ın yalnızca etki noktalarını belirlemenin bir yolu olduğunu unutmayın.
- Etkili noktalarla başa çıkmanın birçok yolu vardır; bunlar arasında bu noktaları kaldırmak, bu noktaları ortalama veya medyan gibi bir değerle değiştirmek veya noktaları modelde tutmak ancak sonuçların gerilemesini bildirirken bunları dikkatli bir şekilde not etmek yer alır.