R: كيفية إزالة القيم المتطرفة من أكثر سلاسة في GGPLOT2؟

StackOverflow https://stackoverflow.com/questions/2612495

سؤال

لديّ مجموعة البيانات التالية التي أحاول رسمها باستخدام GGPLOT2 ، إنها سلسلة زمنية من ثلاث تجارب A1 و B1 و C1 وكان لكل تجربة ثلاث مكررات.

أحاول إضافة إحصائيات تكتشف وتزيل القيم المتطرفة قبل العودة أكثر سلاسة (يعني وتباين؟). لقد كتبت وظيفتي الخارجية الخاصة (غير معروضة) ، لكنني أتوقع أن تكون هناك بالفعل وظيفة للقيام بذلك ، لم أجدها.

لقد نظرت إلى STAT_SUM_DF ("median_hilow" ، Geom = "Smooth") من بعض الأمثلة في كتاب GGPLOT2 ، لكنني لم أفهم DOC من HMISC لمعرفة ما إذا كان يزيل القيم المتطرفة أم لا.

هل هناك وظيفة لإزالة القيم المتطرفة مثل هذه في GGPLOT ، أو أين يمكنني تعديل الكود الخاص بي أدناه لإضافة وظيفتي الخاصة؟

تحرير: لقد رأيت هذا للتو (كيفية استخدام الاختبارات الخارجية في رمز r) ولاحظ أن هادلي يوصي باستخدام طريقة قوية مثل RLM. أنا أخطط لمنحنيات النمو البكتيرية ، لذلك لا أعتقد أن النموذج الخطي هو الأفضل ، ولكن سيتم تقدير أي نصيحة بشأن نماذج أخرى أو استخدام نماذج قوية في هذا الموقف.

library (ggplot2)  

data = data.frame (day = c(1,3,5,7,1,3,5,7,1,3,5,7,1,3,5,7,1,3,5,7,1,3,5,7,1,3,5,7,1,3,5,7,1,3,5,7), od = 
c(
0.1,1.0,0.5,0.7
,0.13,0.33,0.54,0.76
,0.1,0.35,0.54,0.73
,1.3,1.5,1.75,1.7
,1.3,1.3,1.0,1.6
,1.7,1.6,1.75,1.7
,2.1,2.3,2.5,2.7
,2.5,2.6,2.6,2.8
,2.3,2.5,2.8,3.8), 
series_id = c(
"A1", "A1", "A1","A1",
"A1", "A1", "A1","A1",
"A1", "A1", "A1","A1",
"B1", "B1","B1", "B1",
"B1", "B1","B1", "B1",
"B1", "B1","B1", "B1",
"C1","C1", "C1", "C1",
"C1","C1", "C1", "C1",
"C1","C1", "C1", "C1"),
replicate = c(
"A1.1","A1.1","A1.1","A1.1",
"A1.2","A1.2","A1.2","A1.2",
"A1.3","A1.3","A1.3","A1.3",
"B1.1","B1.1","B1.1","B1.1",
"B1.2","B1.2","B1.2","B1.2",
"B1.3","B1.3","B1.3","B1.3",
"C1.1","C1.1","C1.1","C1.1",
"C1.2","C1.2","C1.2","C1.2",
"C1.3","C1.3","C1.3","C1.3"))

> data
   day   od series_id replicate
1    1 0.10        A1      A1.1
2    3 1.00        A1      A1.1
3    5 0.50        A1      A1.1
4    7 0.70        A1      A1.1
5    1 0.13        A1      A1.2
6    3 0.33        A1      A1.2
7    5 0.54        A1      A1.2
8    7 0.76        A1      A1.2
9    1 0.10        A1      A1.3
10   3 0.35        A1      A1.3
11   5 0.54        A1      A1.3
12   7 0.73        A1      A1.3
13   1 1.30        B1      B1.1
... etc...

هذا ما لدي حتى الآن ويعمل بشكل جيد ، لكن لا تتم إزالة القيم المتطرفة:

r <- ggplot(data = data, aes(x = day, y = od))
r + geom_point(aes(group = replicate, color = series_id)) + # add points
   geom_line(aes(group = replicate, color = series_id)) + # add lines
   geom_smooth(aes(group = series_id))  # add smoother, average of each replicate

تحرير: لقد أضفت للتو مخططين أدناه يوضحان أمثلة على المشكلات الخارجية التي أواجهها من البيانات الحقيقية بدلاً من بيانات المثال أعلاه.

تعرض المؤامرات الأولى من سلسلة P26S4 وحوالي اليوم 32 شيء غريب حقًا استمر في اثنين من النسخ المتماثلة ، ويظهر 2 من عيارين.

تُظهر المؤامرات الثانية من سلسلة P22S5 وفي اليوم 18 ، وهو أمر غريب استمر في القراءة في ذلك اليوم ، على الأرجح خطأ في الجهاز.

في الوقت الحالي ، أقوم بتثبيت البيانات ، للتحقق من أن منحنيات النمو تبدو على ما يرام. بعد أخذ نصيحة Hadley ووضع عائلة = "متماثل" ، أنا واثق من أن اللويس أكثر سلاسة يقوم بعمل لائق في تجاهل القيم المتطرفة.

p26s4 shows around day 32 something really weird went on in two of the replicates, showing 2 outliers p22s5 shows that on day 18, something weird went on with the reading that day, likely machine error I think

@Peter/@Hadley ، الشيء التالي الذي أود القيام به هو محاولة تناسب منحنى نمو اللوجستية أو Gompertz أو Richard إلى هذه البيانات بدلاً من LOESS وحساب معدل النمو في المرحلة الأسية. في النهاية أخطط لاستخدام حزمة Grofit في R (http://cran.r-project.org/web/packages/grofit/index.html) ، لكن في الوقت الحالي أود أن أرسم هؤلاء باستخدام GGPLOT2 يدويًا إذا أمكن. إذا كان لديك أي مؤشرات ، فسيكون موضع تقدير كبير.

هل كانت مفيدة؟

المحلول

هل جربت family = "symmetric" حجة ل geom_smooth (والتي بدورها سيتم نقلها إلى loess))؟ هذا سيجعل لويس ناعمة المقاومة للقيم المتطرفة.

ومع ذلك ، بالنظر إلى بياناتك ، لماذا تعتقد أن الملاءمة الخطية ليست كافية؟ لديك فقط 4 قيم × ، وبالتأكيد لا يبدو أن هناك دليلًا قويًا على الخروج عن الخطية.

نصائح أخرى

أولاً ، لست متأكدًا من أن "Outlier" يتم تعريفه بشكل صحيح على هذه البيانات الصغيرة.

ثانياً ، يجب عليك بعد ذلك أن تقرر ما تعنيه بـ "Outlier" ، هل هو أحد العقاقير ، أو واحدة من النسخ المتماثلة ، أو واحدة من النقاط الزمنية؟

كما يلاحظ هادلي ، هناك القليل من الأدلة على الانحراف عن الخطية.

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

لذلك ، يجب أن أسأل بالضبط لماذا تريد إزالة القيم المتطرفة. أي ما الذي ستفعله بهذه البيانات (إلى جانب صنع مؤامرات لطيفة)؟

آمل أن يساعد هذا

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top