Interpretacja i walidacja modelu regresji proporcjonalnych hazardów Coxa przy użyciu R w języku angielskim

14

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 cphfunkcji. Moje dane są zapisywane w obiekcie o nazwie Data. Zmienne w, xi ysą ciągłe; zjest 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.zphponiż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 rmspakietu (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ć validatefunkcji, 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ć?
Alexander
źródło
2
Wprowadziłem kilka większych zmian w powyższym pierwszym pytaniu, około trzy godziny po pierwszym zadaniu. Próbowałem zastosować się do bardzo pomocnych rad dr Harrella. Nadal byłbym bardzo wdzięczny, gdyby ktoś próbował mi wyjaśnić powyższe cphwyniki zwykłym angielskim lub wskazałby mi referencję, która by to zrobiła. Dr Harrell, bardzo dziękuję za pomoc do tej pory!
Alexander

Odpowiedzi:

13

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 plotowaniacox.zphco 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 (funkcje rcorr.censi val.surv) i resampling walidację wewnętrzną (funkcje validate, calibrate) są realizowane w R rmsopakowaniu. Studia przypadków dlarmspakiet znajduje się w notatkach z kursu na2×2

Frank Harrell
źródło
1
Doktorze Harrell, dziękuję bardzo za komentarze. Próbowałem plot(cox.zph(fit[[1]], transform="km", global=TRUE))jednak pisać , ale to dało Error 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?
Alexander
1
Jeśli połączę swoje dane treningowe i walidacyjne, otrzymam 166 obserwacji z 75 zdarzeniami. Jak zasugerowałeś, mogę przypisać wartości mojej zmiennej „z” moim 13 obserwacjom, w których brakuje tych danych, eliminując ten problem. Podoba mi się twoja sugestia przeprowadzenia 100-krotnej 10-krotnej weryfikacji krzyżowej. Jeśli masz czas, byłbym bardzo wdzięczny, gdybyś mógł zaoferować więcej konkretnej wskazówki, jak korzystać z pakietów rms w tym celu. W międzyczasie będę nadal czytać Twoją stronę internetową. Chciałbym wziąć kurs w przyszłości. Niestety w tej chwili jestem w Europie, trochę za daleko!
Alexander
2
W przypadku problemu osobliwości zrób to plot(cox.zph(...), df=2). Zobacz przykłady w notatkach z kursu rmslub zainstaluj pakiet (który także potrzebuje Hmiscpakietu) i wpisz te polecenia, aby wyświetlić pliki pomocy:?cph ?validate.cph ?calibrate.cph
Frank Harrell
2
Jeszcze raz dziękuję za pomoc! W ten weekend wydrukowałem notatki z kursu i spędzę ten tydzień czytając je i analizując wszystkie studia przypadków.
Alexander
4

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ś.

Zhubarb
źródło
1
Czy możesz opisać, w jaki sposób artykuł sugeruje interpretację cphwyników?
smillig
2
+1 Dziękujemy za odniesienie i witamy na tej stronie! Byłoby wspaniale, gdybyś mógł również przedstawić zwięzły przegląd zawartości artykułu, ponieważ staramy się znaleźć odpowiedzi, które mogą stać się samodzielne.
Gala
Tego linku już nie ma
Marcin Kosiński,
1
Link socialsciences.mcmaster.ca/jfox/Books/Companion-1E/… obecnie działa i wygląda na ten sam artykuł, do którego odnosi się ta odpowiedź.
dnlbrky