Test statistics (e.g. chisquare test) inside a latex table using a batch table in R / Knitr / Rstudio

I would like to use tabular (), a function from the package table, to cross-tabulate two variables (e.g. v1 and v2) and present the p-value of the chisq test in the table. It is easy to get cross-forwarding, but I cannot get the p value inside the table. This is what I tried, with no luck:

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} 
+6
source share
2 answers

I don’t know how to do this using tables::tabular , but it will be done using Hmisc::summary.formula.reverse if you have your system configured to create PDF files through latex (). I had to search the Rhelp archives to find out that the "exclude1" argument needs to be included in the latex argument list. Once you get back to the exclude1 documentation, it will appear in the latex.summary.formula.reverse usage latex.summary.formula.reverse , although I thought I was reading the help page for summary.rms :

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

enter image description here

You can intercept latex output "along the way" if you want to insert it into a longer document by assigning output to a named file.

 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} 
+7
source

You can also insert text from chi-square statistics into the signature via xtable (). For instance:

 #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 
0
source

Source: https://habr.com/ru/post/944825/


All Articles