2011-10-15 6 views
6

Nie chcę eksportować danych wyjściowych z regresji Coxa do tabeli, którą mogę następnie umieścić w moim artykule. Myślę, że najlepszym sposobem, aby go o to z xtable:Wyjście regresji Coxa w Xtable - wybieranie wierszy/kolumn i dodawanie przedziału ufności

library(survival) 
data(pbc) 
fit.pbc <- coxph(Surv(time, status==2) ~ age + edema + log(bili) + 
    log(protime) + log(albumin), data=pbc) 

summary(fit.pbc) 
library(xtable) 
xtable(fit.pbc) 

teraz chcę wykonać następujące czynności w celu wyjścia:

  • Dodaj przedział ufności (CI) 95%
  • Wybierz niektóre wiersze, powiedzmy wiek i log (protime)
  • Round exp (B) & CI do trzech miejsc po przecinku
  • Usuń kolumnę z oo & regularnego Coef

Z góry dziękuję!

Odpowiedz

9

Podejdę do tego, najpierw sprawdzając, w jaki sposób pakiet survival konstruuje domyślnie drukowaną tabelę.

Aby znaleźć funkcję, która robi to drukowanie, zbadać klasę swojej dopasowanie obiektu, a następnie spojrzeć na sposób drukowania dla tej klasy:

class(fit.pbc) 
# [1] "coxph" 
grep("coxph", methods("print"), value=TRUE) 
# [1] "print.coxph"   "print.coxph.null" 
# [3] "print.coxph.penal" "print.summary.coxph" 

Po przyjrzeniu print.coxph, oto co przyszedłem z:

cox <- fit.pbc 

# Prepare the columns 
beta <- coef(cox) 
se <- sqrt(diag(cox$var)) 
p <- 1 - pchisq((beta/se)^2, 1) 
CI <- round(confint(cox), 3) 

# Bind columns together, and select desired rows 
res <- cbind(beta, se = exp(beta), CI, p) 
res <- res[c("age", "log(protime)"),] 

# Print results in a LaTeX-ready form 
xtable(res) 
+0

Dzięki, dokładnie to proste rozwiązanie, którego szukałem :) –

3
xtable(round(summary(fit.pbc)$conf.int[c(1,3),],3)) 
#-----------------------------# 
% latex table generated in R 2.13.1 by xtable 1.5-6 package 
% Sat Oct 15 18:36:04 2011 
\begin{table}[ht] 
\begin{center} 
\begin{tabular}{rrrrr} 
    \hline 
& exp(coef) & exp(-coef) & lower .95 & upper .95 \\ 
    \hline 
age & 1.04 & 0.96 & 1.02 & 1.06 \\ 
    log(bili) & 2.37 & 0.42 & 2.02 & 2.79 \\ 
    \hline 
\end{tabular} 
\end{center} 
\end{table} 

To pokazuje, co można zobaczyć przy ul na skróconej-Object

str(summary(fit.pbc)) 
# snipped 
$ conf.int : num [1:5, 1:4] 1.0404 2.4505 2.3716 10.8791 0.0815 ... 
    ..- attr(*, "dimnames")=List of 2 
    .. ..$ : chr [1:5] "age" "edema" "log(bili)" "log(protime)" ... 
    .. ..$ : chr [1:4] "exp(coef)" "exp(-coef)" "lower .95" "upper .95" 
+0

Możesz także użyć argumentu 'cyfry' do' xtable' zamiast wysyłać go przez 'round'. –

+0

Myślę, że podsumowanie zostało zaokrąglone do 2 cyfr. (Ale i tak rzadko jest wystarczająca dokładność, aby uzasadnić więcej niż 2 cyfry.) –

+0

Dzięki za trud, wybrałeś odpowiedź Josha, ponieważ rozwiązuje ona wszystkie moje problemy. @DWin - Podałem 3 cyfry, ponieważ runda podsumowująca do 2 cyfr - mam bardzo duży zbiór danych i jeszcze nie zdecydowałem się na liczbę miejsc po przecinku, chociaż całkowicie zgadzam się, że wiele miejsc po przecinku daje fałszywe postrzeganie statystyk jako bardziej precyzyjnych niż oni są. –

Powiązane problemy