Cara mengidentifikasi titik data yang berpengaruh menggunakan jarak cook


Jarak Cook , sering dilambangkan dengan D i , digunakan dalam analisis regresi untuk mengidentifikasi titik data berpengaruh yang mungkin berdampak negatif pada model regresi Anda.

Rumus jarak Cook adalah:

d i = (r i 2 / p*MSE) * (h ii / (1-h ii ) 2 )

Emas:

  • r i adalah residu ke -i
  • p adalah jumlah koefisien dalam model regresi
  • MSE adalah kesalahan kuadrat rata-rata
  • h ii adalah nilai leverage ke-i

Meskipun rumusnya tampak agak rumit, kabar baiknya adalah sebagian besar perangkat lunak statistik dapat menghitungnya dengan mudah untuk Anda.

Pada dasarnya, jarak Cook melakukan satu hal: mengukur seberapa besar perubahan semua nilai model yang dipasang ketika titik data ke -i dihapus.

Titik data yang memiliki nilai jarak Cook yang tinggi menunjukkan bahwa hal tersebut sangat mempengaruhi nilai yang dipasang. Aturan umumnya adalah setiap titik dengan jarak Cook lebih besar dari 4/n ( dengan n adalah jumlah total titik data ) dianggap outlier.

Penting untuk diperhatikan bahwa jarak Cook sering digunakan untuk mengidentifikasi titik data yang berpengaruh. Hanya karena suatu titik data berpengaruh bukan berarti titik data tersebut harus dihapus. Anda harus terlebih dahulu memeriksa apakah titik data dicatat secara tidak benar atau ada sesuatu yang aneh pada titik data yang dapat menunjukkan temuan menarik.

Cara menghitung jarak Cook di R

Contoh berikut mengilustrasikan cara menghitung jarak Cook di R.

Pertama, kita akan memuat dua perpustakaan yang kita perlukan untuk contoh ini:

 library(ggplot2)
library(gridExtra)

Selanjutnya, kita akan mendefinisikan dua bingkai data: satu dengan dua outlier dan satu lagi tanpa outlier.

 #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 ))

Selanjutnya, kita akan membuat plot sebar untuk menampilkan dua bingkai data secara berdampingan:

 #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)

Kita dapat melihat bagaimana outlier mempengaruhi kesesuaian garis regresi secara negatif pada grafik kedua.

Untuk mengidentifikasi titik-titik berpengaruh dalam kumpulan data kedua, kita dapat menghitung jarak Cook untuk setiap observasi dalam kumpulan data dan kemudian memplot jarak ini untuk melihat observasi mana yang berada di atas ambang batas tradisional 4/n:

 #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

Kita dapat melihat dengan jelas bahwa observasi pertama dan terakhir dalam kumpulan data melebihi ambang batas 4/n. Oleh karena itu, kami akan mengidentifikasi kedua observasi ini sebagai titik data berpengaruh yang berdampak negatif pada model regresi.

Jika kita ingin menghapus semua observasi yang melebihi ambang batas 4/n, kita dapat melakukannya menggunakan kode berikut:

 #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, ]

Kemudian kita dapat membandingkan dua plot sebar: satu menunjukkan garis regresi dengan adanya titik pengaruh dan yang lainnya menunjukkan garis regresi dengan titik pengaruh dihilangkan:

 #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)

Kita dapat melihat dengan jelas seberapa cocok garis regresi dengan data setelah dua titik data yang berpengaruh dihilangkan.

Catatan teknis

  • Sebagian besar perangkat lunak statistik memiliki kemampuan untuk menghitung jarak Cook dengan mudah untuk setiap observasi dalam kumpulan data.
  • Ingatlah bahwa Jarak Cook hanyalah sebuah cara untuk mengidentifikasi titik-titik pengaruh.
  • Ada banyak cara untuk menangani titik-titik yang berpengaruh, termasuk: menghilangkan titik-titik tersebut, mengganti titik-titik tersebut dengan nilai seperti mean atau median, atau sekadar mempertahankan titik-titik tersebut dalam model namun mencatatnya dengan cermat saat melaporkan hasil regresi.

Tambahkan komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *