Вопрос

Я считываю разреженную таблицу из файла, который выглядит как:

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

Обратите внимание, что длина строк различна.

Каждая строка представляет собой одну симуляцию.Значение в i-м столбце в каждой строке указывает, сколько раз значение i-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() (в базе R) или Ecdf() (из Hmisc пакет) функций.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top