Czy ktoś może mi wyjaśnić mój model Coxa zwykłym angielskim?
Dopasowałem następujący model regresji Coxa do wszystkich moich danych za pomocą tej cph
funkcji. Moje dane są zapisywane w obiekcie o nazwie Data
. Zmienne w
, x
i y
są ciągłe; z
jest czynnikiem dwóch poziomów. Czas mierzony jest w miesiącach. Niektórym moim pacjentom brakuje danych dla zmiennej z
( NB : Należycie zwróciłem uwagę na sugestię dr Harrella, poniżej, że przypisuję te wartości, aby uniknąć odchylania mojego modelu i zrobię to w przyszłości).
> fit <- cph(formula = Surv(time, event) ~ w + x + y + z, data = Data, x = T, y = T, surv = T, time.inc = 12)
Cox Proportional Hazards Model
Frequencies of Missing Values Due to Each Variable
Surv(time, event) w x y z
0 0 0 0 14
Model Tests Discrimination
Indexes
Obs 152 LR chi2 8.33 R2 0.054
Events 64 d.f. 4 g 0.437
Center 0.7261 Pr(> chi2) 0.0803 gr 1.548
Score chi2 8.07
Pr(> chi2) 0.0891
Coef S.E. Wald Z Pr(>|Z|)
w -0.0133 0.0503 -0.26 0.7914
x -0.0388 0.0351 -1.11 0.2679
y -0.0363 0.0491 -0.74 0.4600
z=1 0.3208 0.2540 1.26 0.2067
Próbowałem również przetestować założenie o proporcjonalnych zagrożeniach, używając cox.zph
poniższego polecenia, ale nie wiem, jak interpretować jego wyniki. Wprowadzenie plot()
polecenia powoduje wyświetlenie komunikatu o błędzie.
cox.zph(fit, transform="km", global=TRUE)
rho chisq p
w -0.1125 1.312 0.2520
x 0.0402 0.179 0.6725
y 0.2349 4.527 0.0334
z=1 0.0906 0.512 0.4742
GLOBAL NA 5.558 0.2347
Pierwszy problem
- Czy ktoś może mi wyjaśnić wyniki powyższej pracy zwykłym angielskim? Mam wykształcenie medyczne i nie mam formalnego szkolenia w zakresie statystyki.
Drugi problem
Jak sugeruje dr Harrell, chciałbym wewnętrznie zweryfikować mój model, wykonując 100 iteracji 10-krotnej walidacji krzyżowej przy użyciu
rms
pakietu (z tego, co rozumiem, wymagałoby to zbudowania100 * 10 = 1000
różnych modeli, a następnie poproszenia ich o przewidzenie czasów przeżycia pacjentów, których nigdy nie widzieli).Próbowałem użyć
validate
funkcji, jak pokazano.> v1 <- validate(fit, method="crossvalidation", B = 10, dxy=T) > v1 index.orig training test optimism index.corrected n Dxy -0.2542 -0.2578 -0.1356 -0.1223 -0.1320 10 R2 0.0543 0.0565 0.1372 -0.0806 0.1350 10 Slope 1.0000 1.0000 0.9107 0.0893 0.9107 10 D 0.0122 0.0128 0.0404 -0.0276 0.0397 10 U -0.0033 -0.0038 0.0873 -0.0911 0.0878 10 Q 0.0155 0.0166 -0.0470 0.0636 -0.0481 10 g 0.4369 0.4424 0.6754 -0.2331 0.6700 10
Jak przeprowadzasz próbkowanie 100x? Myślę, że mój powyższy kod przeprowadza weryfikację krzyżową tylko raz.
Chciałem wtedy dowiedzieć się, jak dobry był mój model w przewidywaniu. Próbowałem następujące:
> c_index <- abs(v1[1,5])/2 + 0.5 > c_index [1] 0.565984
Czy to oznacza, że mój model jest tylko nieznacznie lepszy od rzutu monetą?
Trzeci problem
Dr Harrell zwraca uwagę, że przyjąłem liniowość efektów towarzyszących oraz że liczba zdarzeń w mojej próbce jest zaledwie na tyle duża, że pasuje do wiarygodnego modelu, jeśli wszystkie efekty towarzyszące będą liniowe.
- Czy to oznacza, że powinienem uwzględnić w moim modelu jakieś pojęcie interakcji? Jeśli tak, jakieś porady dotyczące tego, co umieścić?
źródło
cph
wyniki zwykłym angielskim lub wskazałby mi referencję, która by to zrobiła. Dr Harrell, bardzo dziękuję za pomoc do tej pory!Odpowiedzi:
Na początek rozważ kilka rzeczy. Po pierwsze, wykluczasz zbyt wiele obserwacji z brakującymi danymi, co spowoduje stronniczość. Rozważ wielokrotne przypisanie. Po drugie, istnieje metoda plotowania2 × 2
cox.zph
co jest przydatne w ocenie proporcjonalnych zagrożeń. Po trzecie, przyjąłeś liniowość efektów towarzyszących. Po czwarte, liczba zdarzeń w Twojej próbce treningowej jest zaledwie na tyle duża, że pasuje do wiarygodnego modelu, jeśli wszystkie efekty towarzyszące są liniowe (co jest rzadkie). Twoja próbka testowa musiałaby mieć prawdopodobnie 400 zdarzeń, aby uzyskać wiarygodną ocenę dokładności prognozowania. Nie jest jasne, czy posiadasz wystarczającą ilość danych, aby podzielić dane na dwie części. Walidacja ponownego próbkowania (100 powtórzeń 10-krotnej walidacji krzyżowej lub użyj bootstrapu) jest lepszym rozwiązaniem. Oba oryginalnego walidacji zewnętrzne (funkcjercorr.cens
ival.surv
) i resampling walidację wewnętrzną (funkcjevalidate
,calibrate
) są realizowane w Rrms
opakowaniu. Studia przypadków dlarms
pakiet znajduje się w notatkach z kursu naźródło
plot(cox.zph(fit[[1]], transform="km", global=TRUE))
jednak pisać , ale to dałoError in plot.cox.zph(cox.zph(fit[[1]], transform = "km", global = TRUE)) : Spline fit is singular, try a smaller degrees of freedom
. Czy wywołuję tę funkcję niepoprawnie?plot(cox.zph(...), df=2)
. Zobacz przykłady w notatkach z kursurms
lub zainstaluj pakiet (który także potrzebujeHmisc
pakietu) i wpisz te polecenia, aby wyświetlić pliki pomocy:?cph
?validate.cph
?calibrate.cph
Wynik funkcji R cph, na podstawie odpowiedniego przykładu, wyjaśniono w tym łatwym do zrozumienia artykule J. Foxa.
Radzę przeczytać ten artykuł, jeśli jeszcze tego nie zrobiłeś.
źródło
cph
wyników?