Как извлечь значения 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() в базовом пакете, вы можете просто сделать следующее:
Создайте функцию ecdf с вашими данными:
fun.ecdf <- ecdf(x) # x is a vector of your data
Теперь используйте эту "функцию ecdf", чтобы сгенерировать кумулятивные вероятности любого вектора, который вы передаете, включая ваши исходные отсортированные данные:
my.ecdf <- fun.ecdf(sort(x))