Как экспортировать значения графика X и Y из графика R?

Используя пакеты eha и survival в R, я использую следующий код для создания графика выживания ниже:

with(dataset, plot(Surv(enter, exit, event), ylim= c(0.87, 1.0), fn = "surv", strata = Gender))

введите здесь описание изображения

Вместо того, чтобы экспортировать изображение графика, как я могу экспортировать значения X и Y для каждой строки на этом графике? Я попытался использовать следующий код, однако он создает только пустой файл .csv:

write.table((with(dataset, plot(Surv(enter, exit, event), ylim= c(0.87, 1.0), fn = "surv", strata = Gender))), file="testfit.csv", sep=',')

Спасибо за любую помощь заранее.

Во-вторых, кто-нибудь знает, как сделать этот сюжет лучше в ggplot2?


person Sidney Carton    schedule 05.10.2015    source источник
comment
Зачем вам строить объект, а затем пытаться вытащить значения из графика ??? Вытяните значения из самого объекта! my_surv = with(dataset, Surv(enter, exit, event)). Затем см. ?survfit или ?plot.survfit   -  person Gregor Thomas    schedule 06.10.2015
comment
ggfortify имеет хорошие графики выживания rpubs.com/sinhrks/plot_surv   -  person hrbrmstr    schedule 06.10.2015
comment
Я не понимаю тебя, @Грегор. Как в ?survfit, так и в ?plot.survift я не вижу вариантов для извлечения значений из самого объекта.   -  person Sidney Carton    schedule 06.10.2015
comment
Они там все одинаковые. Присмотревшись повнимательнее, я действительно думаю, что объект summary.survfit — это то, из чего их проще всего вытащить. Используя пример из ?summary.survfit, x = summary( survfit( Surv(futime, fustat)~1, data=ovarian)); head(x), вы увидите, что x имеет компоненты time и surv.   -  person Gregor Thomas    schedule 06.10.2015
comment
@Грегор, спасибо. Да, summary(survfit(Surv(enter, exit, event) ~ 1, data=dataset)) выводит то, что мне нужно. Моя следующая задача — экспортировать в .csv. write.table(summary(survfit(Surv(enter, exit, event) ~ 1, data=dataset)), file="testfit.csv", sep=',') throws не может принудить класс summary.survfit к data.frame, и когда я пытаюсь стратифицировать с помощью summary(survfit(Surv(enter, exit, event) ~ 1, subset=(Gender==M), data=dataset)), RStudio возвращает ошибку в eval(expr, envir, enclos): объект 'M' не найден   -  person Sidney Carton    schedule 07.10.2015
comment
Назначьте сводку и используйте компоненты сводки для создания нужного фрейма данных. x = summary(...); str(x).   -  person Gregor Thomas    schedule 07.10.2015
comment
См., например, Получение оценок выживания в R.   -  person Gregor Thomas    schedule 07.10.2015
comment
Благодарю за помощь, @Грегор. Хотел бы я понять, почему as.data.frame(summary(survfit(Surv(enter, exit, event) ~ 1, data=dataset))) снова не может принудить класс summary.survfit к data.frame.   -  person Sidney Carton    schedule 08.10.2015
comment
x = summary(survfit(Surv(enter, exit, event) ~ 1, data=dataset)); str(x) дает следующие результаты. Указывает ли это, как принудить класс к data.frame? List of 15 $ n: int $ time: num $ n.risk: num $ n.event: num $ n.censor: num $ n.enter: num $ surv: num $ type: chr "counting" $ std.err: num $ upper: num $ lower: num $ conf.type: chr "log" $ conf.int : num 0.95 $ call: language survfit(formula = Surv(enter, exit, event) ~ 1, data = dataset) $ table: Named num ..- attr(*, "names")= chr "records" "n.max" "n.start" "events" ... - attr(*, "class")= chr "summary.survfit"   -  person Sidney Carton    schedule 08.10.2015
comment
@Грегор, я сделал, как вы предложили, и назначил сводку fit <- survfit(Surv(enter, exit, event) ~ 1, data=dataset) и как в Получение... Я пытался принудить к кадру данных с помощью as.data.frame(summary(fit)[c("time", "survival")]). Теперь выдается ошибка Error in data.frame(time = c(.1, .2, .5, .6, .8, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, : arguments подразумевают разное количество строк: 74, 0. Что мне теперь делать?   -  person Sidney Carton    schedule 19.10.2015
comment
Может быть, сделать воспроизводимый пример? Можете ли вы поделиться некоторыми данными или найти встроенные данные с похожей структурой, которые вызывают ту же ошибку?   -  person Gregor Thomas    schedule 20.10.2015


Ответы (1)


Вы можете использовать пакет gridGraphics, чтобы преобразовать график в гроб, а затем захватить точки из объекта гроб. Мне нравится это решение, потому что оно применимо к широкому кругу задач.

Используя график, который был создан здесь пример графика:

# plot a graph
library(survival)
library(grid)
library(gridGraphics)
data(lung)
lung.surv <- survfit(Surv(time,status) ~ 1, data = lung)
plot(lung.surv)

# capture the plotted output as a grob
grid.echo()
grid.grab() -> k

# pull out the data from the grob..
k$children$`graphics-plot-1-points-1`$x -> x
k$children$`graphics-plot-1-points-1`$y -> y

Я заметил, что ваш график стратифицирован по полу... Убедитесь, что вы выбрали правильное подмножество точек для каждого пола.

person Chris    schedule 06.10.2015
comment
Спасибо, @Крис. Этот модифицированный код по-прежнему генерирует мою кривую выживания в соответствии с приведенным выше шаблоном: data.surv ‹- survfit(Surv(enter, exit, event) ~ 1, data = dataset) И теперь, когда я ввел остальную часть вашего кода, как мне это сделать? Я получаю доступ/экспортировать значения X и Y? Также я не уверен, как стратифицировать по полу. Я попробовал этот код ниже, но график заканчивается только горизонтальной линией, а затем вертикальной линией вместо обычной кривой выживания: data.surv ‹- survfit(Surv(enter, exit, event) ~ 1, subset= (Пол), данные = набор данных) Как мне составить подмножество? - person Sidney Carton; 06.10.2015
comment
Какой набор данных вы используете и какова цель анализа? Если вы пытаетесь построить новую кривую выживания со значениями x и y, я бы рекомендовал использовать ggfortify. - person Chris; 06.10.2015