سؤال

أنا أقرأ جدولًا متفرقًا من ملف يشبه:

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 حزمة) وظائف.

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