Как извлечь значения ecdf из ecdfplot()

Если я использую ecdfplot() функция latticeExtra пакет, как я могу получить фактические значения, рассчитанные, т. е. Y-значения, которые соответствуют ~x|g вход?

Я смотрел на ?ecdfplot но нет описания к этому. Для обычной функции высокого уровня ecdf() это работает с командой plot=FALSE но это не работает для ecdfplot(),

Причина, по которой я хочу использовать ecdfplot() скорее, чем ecdf() является то, что мне нужно рассчитать ecdf() значения для группирующей переменной. Я знаю, что тоже могу сделать это, но я вполне уверен, что есть и шоссе.

Вот небольшой пример

u <- rnorm(100,0,1)
mygroup <- c(rep("group1",50),rep("group2",50))
ecdfplot(~u, groups=mygroup)

Я хотел бы извлечь значения y, данные каждой группе для соответствующих значений x.

2 ответа

Решение

Я знаю, ты сказал, что не хочешь использовать ecdf, но в этом случае его гораздо проще использовать, чем получить данные из объекта решетки, который ecdfplot возвращается. (В конце концов, это все, что ecdfplot делает - это просто делает это за кадром).

В случае вашего примера, следующее даст вам матрицу значений у (где x весь ваш вклад uхотя вы можете выбрать другой) для каждого ECDF:

ecdfs = lapply(split(u, mygroup), ecdf)
ys = sapply(ecdfs, function(e) e(u))
# output:
#       group1 group2
#  [1,]   0.52   0.72
#  [2,]   0.68   0.78
#  [3,]   0.62   0.78
#  [4,]   0.66   0.78
#  [5,]   0.72   0.80
#  [6,]   0.86   0.94
#  [7,]   0.10   0.26
#  [8,]   0.90   0.94
# ...

ETA: если вы просто хотите, чтобы каждый столбец соответствовал 50 значениям x в этом столбце, вы можете сделать следующее:

ys = sapply(split(u, mygroup), function(g) ecdf(g)(g))

(Обратите внимание, что если количество значений в каждой группе не совпадает, это будет список, а не матрица со столбцами).

Если вы придерживаетесь функции ecdf() в базовом пакете, вы можете просто сделать следующее:

  1. Создайте функцию ecdf с вашими данными:

    fun.ecdf <- ecdf(x) # x is a vector of your data
    
  2. Теперь используйте эту "функцию ecdf", чтобы сгенерировать кумулятивные вероятности любого вектора, который вы передаете, включая ваши исходные отсортированные данные:

    my.ecdf <- fun.ecdf(sort(x))
    
Другие вопросы по тегам