2012-12-11 10 views
7

Przeprowadzam analizę przeżycia w R i staram się uporządkować/uprościć mój kod.Używanie formuły obiektu typu survfit w wywołaniu funkcji survdiff

W tej chwili robię kilka kroków w moją analizą danych:

  1. uczynić obiekt Surv (czas zmienną ze wskazaniem, czy każda obserwacja została ocenzurowana);
  2. pasuje do tego obiektu Surv zgodnie z predyktorem jakościowym, do wykreślania/szacowania mediany procesów czasu przeżycia; i
  3. obliczyć test log-rank, aby zapytać, czy istnieją dowody na "istotne" różnice w przeżyciu między grupami.

Jako przykład, oto makieta wykorzystująca zestaw danych płuc w pakiecie przeżycia z R. Tak więc poniższy kod jest dostatecznie podobny do tego, co chcę zrobić, ale znacznie uproszczony pod względem zestawu predykcyjnego (dlatego chcę uprościć kod, więc nie generuję niespójnych wywołań w różnych modelach).

library(survival) 

# Step 1: Make a survival object with time-to-event and censoring indicator. 
# Following works with defaults as status = 2 = dead in this dataset. 
# Create survival object 
lung.Surv <- with(lung, Surv(time=time, event=status)) 

# Step 2: Fit survival curves to object based on patient sex, plot this. 
lung.survfit <- survfit(lung.Surv ~ lung$sex) 
print(lung.survfit) 
plot(lung.survfit) 

# Step 3: Calculate log-rank test for difference in survival objects 
lung.survdiff <- survdiff(lung.Surv ~ lung$sex) 
print(lung.survdiff) 

Teraz wszystko jest w porządku i dandy, i mogę z tym żyć, ale chciałbym lepiej.

Tak więc moje pytanie dotyczy kroku 3. Chciałbym tutaj wykorzystać informacje z formuły z obiektu lung.survfit, aby obliczyć różnice w krzywych przeżycia: np. zadzwoń do survdiff. I tutaj moje zdolne umiejętności programistyczne uderzają w ścianę. Poniżej przedstawiam moją obecną próbę zrobienia tego: Doceniam każdą pomoc, jaką możesz dać! Kiedy już uda mi się to uporządkować, powinienem był w stanie zawrzeć rozwiązanie w funkcji.

lung.survdiff <- survdiff(parse(text=(lung.survfit$call$formula))) 
## Which returns following: 
# Error in survdiff(parse(text = (lung.survfit$call$formula))) : 
# The 'formula' argument is not a formula 
+1

Napisałem to całe pytanie i sformatowałem je ładnie, a następnie zacząłem się zastanawiać, czy istnieje funkcja "as.formula" dostępna w R. Co, oczywiście, istnieje. Postanowiłem więc opublikować pytanie i odpowiedzieć na nie samodzielnie (zgodnie z FAQ), więc rozwiązanie jest bardzo proste, zastępując kod w kroku 3: 'lung.survdiff <- survdiff (as.formula (lung.survfit) $ call $ formula)) ' To jedna z tych" Nie mogłem wymyślić, jak szukać tego, czego szukałem "... –

+1

dzięki za ładnie sformułowane pytanie i powtarzalny przykład. Proszę odpowiedzieć na twoje pytanie, zamieszczając odpowiedź (w przeciwieństwie do komentarza). Możesz także bezpośrednio wyodrębnić formułę za pomocą 'formuły (lung.survfit)'. To, czy będzie działać zgodnie z oczekiwaniami w twojej funkcji, zależy w dużej mierze od samej funkcji. – BenBarnes

+1

@BenBarnes To jeszcze bardziej porządny sposób na wyodrębnienie formuły. Dzięki! Poniżej zamieściłem odpowiedź (musiałem czekać 8 godzin na odpowiedź z powodu braku wystarczającej liczby przedstawicieli). –

Odpowiedz

8

Jak napisałem powyżej, tak naprawdę rozwiązałem odpowiedź na to pytanie wkrótce po napisaniu tego pytania.

Więc krok 3 powyżej może być zastąpiony przez:

lung.survdiff <- survdiff(formula(lung.survfit$call$formula)) 

Ale jak Ben Barnes zauważa w komentarzu na pytanie, formuła z obiektu survfit może być bardziej bezpośrednio ekstrahuje

lung.survdiff <- survdiff(formula(lung.survfit)) 

Dokładnie to, czego chciałem i miałem nadzieję, będzie dostępne - dzięki Ben!

Powiązane problemy