2013-05-12 9 views
6

Ich möchte mit der tabular() - Funktion aus dem Tabellen-Paket eine Kreuztabellierung zweier Variablen durchführen (zB v1 und v2) und stellen den p-Wert des chisq-Tests in der Tabelle dar. Es ist leicht, die Kreuztabelle zu erhalten, aber ich kann den p-Wert in der Tabelle nicht bekommen. Dies ist, was ich habe versucht worden, ohne Erfolg:Teststatistik (zB Chi-Quadrat-Test) innerhalb der Latex-Tabelle mit dem Tabellen-Paket in R/Knitr/Rstudio

enter image description here

\documentclass{article} 

\begin{document} 

<<echo=TRUE,message=FALSE>>= 
library(Hmisc) 
library(tables) 
v1 <- sample(letters[1:2],200,replace=TRUE) 
v2 <- sample(month.name[1:3],200,replace=TRUE) 
df <- data.frame(v1,v2) 
@ 

It is straight forward to get the crosstabulation: 
<<results='asis'>>= 
latex( tabular( Factor(v1) ~ Factor(v2)  , data=df) ) 
@ 

But I cant get the p-value inside the table: 

<<results='asis'>>= 
latex( tabular( Factor(v1)*chisq.test(v1,v2)$p.value ~ Factor(v2)  , data=df) ) 
@ 

\end{document} 
+0

Vielleicht könnten Sie das Paket [reporttools] (http://cran.r-project.org/web/packages/reporttools/index.html) verwenden. – sgibb

Antwort

7

Ich weiß nicht, wie es mit tables::tabular zu tun, aber das wird es tun mit Hmisc::summary.formula.reverse vorausgesetzt, Sie haben Ihr System so konfiguriert ist Produzieren Sie PDF-Dateien über latex(). Ich musste die Rhelp-Archive durchsuchen, um herauszufinden, dass das Argument 'exclude1' in die Argumentliste latex aufgenommen werden musste. Sobald Sie wieder durch die Dokumentation gehen exclude1 nicht im Verwendungsbeispiel von latex.summary.formula.reverse erscheinen, obwohl ich dachte, dass ich die Hilfeseite für summary.rms Lesen:

library(Hmisc) 
latex(summary(v2 ~ v1, data=df, method="reverse" ,test=TRUE), exclude1=FALSE) 

enter image description here

Sie den Ausgang Latex abfangen „zusammen der Weg "wenn Sie es in ein längeres Dokument einbetten möchten, indem Sie die Ausgabe einer benannten Datei zuweisen.

latex(summary(v2 ~ v1, data=df, method="reverse" ,test=TRUE), exclude1=FALSE, file="") 
#-------- 
% latex.default(cstats, title = title, caption = caption, rowlabel = rowlabel,  col.just = col.just, numeric.dollar = FALSE, insert.bottom = legend,  rowname = lab, dcolumn = dcolumn, extracolheads = extracolheads,  extracolsize = Nsize, ...) 
% 
\begin{table}[!tbp] 
\caption{Descriptive Statistics by v2\label{summary}} 
\begin{center} 
\begin{tabular}{lcccc} 
\hline\hline 
\multicolumn{1}{l}{}&\multicolumn{1}{c}{February}&\multicolumn{1}{c}{January}&\multicolumn{1}{c}{March}&\multicolumn{1}{c}{Test Statistic}\tabularnewline 
&\multicolumn{1}{c}{{\scriptsize $N=56$}}&\multicolumn{1}{c}{{\scriptsize $N=73$}}&\multicolumn{1}{c}{{\scriptsize $N=71$}}&\tabularnewline 
\hline 
v1~:~a&43\%~{\scriptsize~(24)}&47\%~{\scriptsize~(34)}&44\%~{\scriptsize~(31)}&$ \chi^{2}_{2}=0.21 ,~ P=0.901 $\tabularnewline 
~~~~b&57\%~{\scriptsize~(32)}&53\%~{\scriptsize~(39)}&56\%~{\scriptsize~(40)}&\tabularnewline 
\hline 
\end{tabular} 
\end{center} 
Numbers after percents are frequencies.\\\noindent Test used:\\Pearson test\end{table} 
+0

Ich werde damit gehen, danke –

+0

Wie bekomme ich es mit Knitr in Rstudio arbeiten. Wenn ich folgendes anbringe: latex (Zusammenfassung (v2 ~ v1, data = df, method = "reverse", test = TRUE), exclude1 = FALSE) in einem results = "asis" -chunk, hängt Rstudio einfach (durch "hängt") ich meine, dass das "stop" -Zeichen in der unteren rechten Ecke der "compile-pdf" -Tabelle erscheint, und ich muss auf "Stop" klicken, bevor ich andere Stücke ausführen kann. –

+1

Ich bin weder ein RStudio noch ein Knitrutzer Ich bin nicht vertraut mit der Verwendung von "ASIS" -Chunks. Sie können "rohe" Latex-Ausgabe auf die Konsole erhalten, indem Sie file = "" angeben, wodurch die Ausgabe in der RStudio-Umgebung beibehalten wird. Ich poste die Ausgabe. –

0

Sie können auch Text aus einer Chi-Quadrat-Statistik in eine Beschriftung über xtable() einfügen. Zum Beispiel:

#sample data 
var1<-sample(c('A', 'B'), 10, replace=T) 
var2<-sample(c('Red', 'Blue'), 10, replace=T) 
#join in frequency table 
tab<-table(var1, var2) 
#conduct chisq.test 
test<-chisq.test(tab) 
#show values of chisq.test() 
name(test) 
#Use xtable, use print.xtable for further manipulations 
out<-xtable(tab, caption=paste('Important table, chi-squared =', test$statistic, ', p=', test$p.value,',' ,test$parameter, 'df', sep=' ')) 
#print 
out