كيفية إزالة القيم المتطرفة في r


القيمة المتطرفة هي ملاحظة بعيدة بشكل غير طبيعي عن القيم الأخرى في مجموعة البيانات. يمكن أن تكون القيم المتطرفة مشكلة لأنها يمكن أن تؤثر على نتائج التحليل.

يشرح هذا البرنامج التعليمي كيفية تحديد وإزالة القيم المتطرفة في R.

كيفية تحديد القيم المتطرفة في R

قبل أن تتمكن من إزالة القيم المتطرفة، يجب عليك أولاً أن تقرر ما تعتبره قيمًا متطرفة. هناك طريقتان شائعتان للقيام بذلك:

1. استخدم المدى الربيعي.

النطاق الربيعي (IQR) هو الفرق بين المئين الخامس والسبعين (Q3) والمئين الخامس والعشرين (Q1) في مجموعة البيانات. وهو يقيس توزيع متوسط 50% من القيم.

يمكنك تعريف الملاحظة على أنها قيمة متطرفة إذا كانت 1.5 مرة من النطاق الربيعي فوق الربع الثالث (Q3) أو 1.5 مرة من المدى الربيعي أسفل الربع الأول (Q1).

القيم المتطرفة = الملاحظات > Q3 + 1.5*IQR أو <Q1 – 1.5*IQR

2. استخدم نتائج z.

تخبرك النتيجة z بعدد الانحرافات المعيارية لقيمة معينة عن المتوسط. نستخدم الصيغة التالية لحساب درجة z:

ض = (X – μ) / σ

ذهب:

  • X هي قيمة بيانات أولية واحدة
  • μ هو متوسط عدد السكان
  • σ هو الانحراف المعياري للسكان

يمكنك تعريف الملاحظة على أنها قيمة متطرفة إذا كانت درجة z الخاصة بها أقل من -3 أو أكبر من 3.

القيم المتطرفة = الملاحظات ذات الدرجات z > 3 أو < -3

كيفية إزالة القيم المتطرفة في R

بمجرد أن تقرر ما تعتبره قيمًا متطرفة، يمكنك بعد ذلك تحديدها وإزالتها من مجموعة البيانات. لتوضيح كيفية القيام بذلك، سوف نستخدم إطار البيانات التالي:

 #make this example reproducible 
set.seed(0)

#create data frame with three columns A', 'B', 'C' 
df <- data.frame(A=rnorm(1000, mean=10, sd=3),
                 B=rnorm(1000, mean=20, sd=3),
                 C=rnorm(1000, mean=30, sd=3))

#view first six rows of data frame
head(df)
         ABC
1 13.78886 19.13945 31.33304
2 9.02130 25.52332 30.03579
3 13.98940 19.52971 29.97216
4 13.81729 15.83059 29.09287
5 11.24392 15.58069 31.47707
6 5.38015 19.79144 28.19184

يمكننا بعد ذلك تحديد القيم المتطرفة وإزالتها باستخدام طريقة z-score أو طريقة المدى الرباعي:

طريقة النتيجة Z:

يوضح التعليمة البرمجية التالية كيفية حساب درجة z لكل قيمة في كل عمود من إطار البيانات ثم إزالة الصفوف التي تحتوي على درجة z واحدة على الأقل بقيمة مطلقة أكبر من 3:

 #find absolute value of z-score for each value in each column
z_scores <- as.data.frame (sapply(df, function(df) (abs(df-mean(df))/sd(df))))

#view first six rows of z_scores data frame
head(z_scores)

          ABC
1 1.2813403 0.25350805 0.39419878
2 0.3110243 1.80496734 0.05890232
3 1.3483190 0.12766847 0.08112630
4 1.2908343 1.32044506 0.38824414
5 0.4313316 1.40102642 0.44450451
6 1.5271674 0.04327186 0.70295309

#only keep rows in dataframe with all z-scores less than absolute value of 3 
no_outliers <- z_scores[!rowSums(z_scores>3), ]

#view row and column count of new data frame
dim(no_outliers)

[1] 994 3

يحتوي إطار البيانات الأصلي على 1000 صف و3 أعمدة. يحتوي إطار البيانات الجديد على 994 صفًا و3 أعمدة، مما يخبرنا أنه تمت إزالة 6 صفوف لأنها تحتوي على درجة z واحدة على الأقل بقيمة مطلقة أكبر من 3 في أحد أعمدتها.

طريقة المدى الربعي:

في بعض الحالات، قد نرغب فقط في تحديد القيم المتطرفة في عمود إطار البيانات. على سبيل المثال، لنفترض أننا نريد فقط إزالة الصفوف التي تحتوي على قيمة خارجية في العمود “A” من إطار البيانات الخاص بنا.

يوضح التعليمة البرمجية التالية كيفية إزالة الصفوف من إطار البيانات الذي تبلغ قيمته في العمود “A” 1.5 مرة النطاق الربيعي فوق الربع الثالث (Q3) أو 1.5 مرة النطاق الربيعي أسفل الربع الربعي الأول (Q1). .

 #find Q1, Q3, and interquartile range for values in column A
Q1 <- quantile(df$A, .25)
Q3 <- quantile(df$A, .75)
IQR <- IQR(df$A)

#only keep rows in dataframe that have values within 1.5*IQR of Q1 and Q3
no_outliers <- subset(df, df$A> (Q1 - 1.5*IQR) & df$A< (Q3 + 1.5*IQR))

#view row and column count of new data frame
dim(no_outliers) 

[1] 994 3

يحتوي إطار البيانات الأصلي على 1000 صف و3 أعمدة. يحتوي إطار البيانات الجديد على 994 صفًا و3 أعمدة، مما يخبرنا أنه تمت إزالة 6 صفوف لأنها تحتوي على قيمة خارجية واحدة على الأقل في العمود A.

متى يتم إزالة القيم المتطرفة

في حالة وجود واحد أو أكثر من القيم المتطرفة، يجب عليك أولاً التحقق من أنها ليست نتيجة خطأ في إدخال البيانات. في بعض الأحيان يقوم الفرد ببساطة بإدخال قيمة بيانات خاطئة أثناء حفظ البيانات.

إذا تبين أن القيمة المتطرفة هي نتيجة لخطأ في إدخال البيانات، فيمكنك أن تقرر تعيين قيمة جديدة لها مثل المتوسط أو الوسيط لمجموعة البيانات.

إذا كانت القيمة قيمة متطرفة حقًا، فيمكنك اختيار إزالتها إذا كان لها تأثير كبير على تحليلك الإجمالي. فقط تأكد من الإشارة في تقريرك أو تحليلك النهائي إلى أنك قمت بإزالة القيم المتطرفة.

مصادر إضافية

في هذا البرنامج التعليمي، استخدمنا rnorm() لإنشاء متجهات للمتغيرات العشوائية الموزعة بشكل طبيعي بالنظر إلى طول المتجه n ومتوسط المحتوى μ والانحراف المعياري للسكان σ . يمكنك معرفة المزيد حول هذه الميزة هنا .

استخدمنا أيضًا sapply() لتطبيق دالة على كل عمود في إطار بيانات يحسب درجات z. يمكنك معرفة المزيد حول هذه الميزة هنا .

Add a Comment

ایمئیل یایینلانمایاجاق ایسته‎نیله‎ن بوشلوقلار خاللانمیشدیر *