2011-10-15 17 views
6

Non voglio esportare l'output da una regressione di cox ad una tabella che poi posso inserire nel mio articolo. Credo che il modo migliore per andare a questo proposito è con XTABLE:Uscita di regressione di Cox in xtable - scelta di righe/colonne e aggiunta di un intervallo di confidenza

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) 

Ora voglio fare quanto segue per l'output:

  • Aggiungi intervallo di confidenza (IC) del 95%
  • Select alcune righe, dicono l'età e log (ProTime)
  • Round the exp (B) & CI o tre decimali
  • Rimuovere la colonna con z & coef regolare

Grazie in anticipo!

risposta

9

Mi piacerebbe avvicinarmi a questo prima di dare un'occhiata a come il pacchetto survival costruisce la tabella che stampa per impostazione predefinita.

Per trovare la funzione che fa che la stampa, esaminare la classe del vostro oggetto in forma, e poi cercare un metodo di stampa per quella classe:

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

Dopo aver dato un'occhiata al print.coxph, ecco cosa mi è venuto con:

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

Grazie, esattamente la soluzione semplice che stavo cercando :) –

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} 

Questo dimostra ciò che si vede con str sul riassunto-oggetto

01.235.164,106 mila
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

Puoi anche usare l'argomento 'cifre' per' xtable' invece di inviarlo tramite 'round'. –

+0

Penso che il riepilogo sia già stato arrotondato a 2 cifre. (Ma c'è raramente abbastanza precisione da giustificare più di 2 cifre comunque.) –

+0

Grazie per l'impegno, ho scelto la risposta di Josh poiché risolve tutti i miei problemi. @DWin - Ho specificato 3 cifre perché sommario arrotonda a 2 cifre - Ho un dataset molto grande e non ho ancora deciso sulla quantità di decimali anche se sono completamente d'accordo sul fatto che molti decimali danno una falsa percezione delle statistiche essendo più precisi di loro sono. –