كيف يمكنني حساب CDF التجريبي في R؟
-
29-09-2019 - |
سؤال
أنا أقرأ جدولًا متفرقًا من ملف يشبه:
1 0 7 0 0 1 0 0 0 5 0 0 0 0 2 0 0 0 0 1 0 0 0 1
1 0 0 1 0 0 0 3 0 0 0 0 1 0 0 0 1
0 0 0 1 0 0 0 2 0 0 0 0 1 0 0 0 1 0 1 0 0 1
1 0 0 1 0 3 0 0 0 0 1 0 0 0 1
0 0 0 1 0 0 0 2 0 0 0 0 1 0 0 0 1 0 1 0 0 1 1 2 1 0 1 0 1
أطوال صف الملاحظة مختلفة.
يمثل كل صف محاكاة واحدة. تقول القيمة في العمود الأول في كل صف عدد المرات التي لوحظت في هذه المحاكاة. على سبيل المثال ، في المحاكاة الأولى (الصف الأول) ، حصلنا على نتيجة واحدة مع القيمة "0" (العمود الأول) ، و 7 نتائج ذات قيمة "2" (العمود الثالث) إلخ.
أرغب في إنشاء وظيفة توزيع تراكمية متوسطة (CDF) لجميع نتائج المحاكاة ، لذلك يمكنني لاحقًا استخدامها لحساب قيمة p تجريبية للحصول على النتائج الحقيقية.
للقيام بذلك ، يمكنني أولاً تلخيص كل عمود ، لكنني بحاجة إلى أخذ الأصفار لأعمدة UNDEF.
كيف أقرأ مثل هذا الجدول بأطوال صف مختلفة؟ كيف أقوم بتلخيص الأعمدة لتحل محل قيم "undef" مع 0 "؟ وأخيرا ، كيف يمكنني إنشاء CDF؟ (يمكنني القيام بذلك يدويًا ولكن أعتقد أن هناك بعض الحزم التي يمكنها القيام بذلك).
المحلول
هذا سوف يقرأ البيانات في:
dat <- textConnection("1 0 7 0 0 1 0 0 0 5 0 0 0 0 2 0 0 0 0 1 0 0 0 1
1 0 0 1 0 0 0 3 0 0 0 0 1 0 0 0 1
0 0 0 1 0 0 0 2 0 0 0 0 1 0 0 0 1 0 1 0 0 1
1 0 0 1 0 3 0 0 0 0 1 0 0 0 1
0 0 0 1 0 0 0 2 0 0 0 0 1 0 0 0 1 0 1 0 0 1 1 2 1 0 1 0 1")
df <- data.frame(scan(dat, fill = TRUE, what = as.list(rep(1, 29))))
names(df) <- paste("Val", 1:29)
close(dat)
مما يسبب:
> head(df)
Val 1 Val 2 Val 3 Val 4 Val 5 Val 6 Val 7 Val 8 Val 9 Val 10 Val 11 Val 12
1 1 0 7 0 0 1 0 0 0 5 0 0
2 1 0 0 1 0 0 0 3 0 0 0 0
3 0 0 0 1 0 0 0 2 0 0 0 0
4 1 0 0 1 0 3 0 0 0 0 1 0
5 0 0 0 1 0 0 0 2 0 0 0 0
....
إذا كانت البيانات موجودة في ملف ، فقم بتقديم اسم الملف بدلاً من dat
. يفترض هذا الرمز أن هناك 29 عمودًا كحد أقصى ، وفقًا للبيانات التي قدمتها. تغيير 29
لتناسب البيانات الحقيقية.
نحصل على مبالغ العمود باستخدام
df.csum <- colSums(df, na.rm = TRUE)
ال ecdf()
تولد الوظيفة ECDF التي تريدها ،
df.ecdf <- ecdf(df.csum)
ويمكننا رسمه باستخدام plot()
طريقة:
plot(df.ecdf, verticals = TRUE)
نصائح أخرى
يمكنك استخدام ال ecdf()
(في قاعدة ص) أو Ecdf()
(من HMISC حزمة) وظائف.