Output a table with standard errors below estimates
So I've got some parameter estimates like so
est<-matrix(1:10,nrow=2)
colnames(est)<-c("a","b","c","d","e")
and I've got some standard errors like so
se<-matrix(seq(0.1,1,by=0.1),nrow=2)
colnames(se)<-c("a","b","c","d","e")
and I want to output a Latex (or 开发者_JS百科HTML) table where each parameter estimate has its standard error in parens just below it.
The table should look something like this
a & b & c & d & e
1 & 3 & 5 & 7 & 9
(0.1) & (0.3) & (0.5) & (0.7) & (0.9)
2 & 4 & 6 & 8 & 10
(0.2) & (0.4) & (0.6) & (0.8) & (1.0)
except, you know, in proper Latex (or HTML). How can I do this from R?
If you don't mind having row labels, the texreg
package can offer a solution:
# your original code:
est <- matrix(1:10, nrow = 2)
colnames(est) <- c("a", "b", "c", "d", "e")
se <- matrix(seq(0.1, 1, by = 0.1), nrow = 2)
colnames(se) <- c("a", "b", "c", "d", "e")
# add row labels:
rownames(est) <- c("row 1", "row 2")
rownames(se) <- c("row 1", "row 2")
library("texreg")
# create a texreg object:
tr <- list()
for (j in 1:ncol(est)) {
tr[[j]] <- createTexreg(
coef.names = rownames(est),
coef = est[, j],
se = se[, j]
)
}
# for text output:
screenreg(tr, custom.model.names = colnames(est),
custom.note = "")
# for LaTeX output:
texreg(tr, custom.model.names = colnames(est),
custom.note = "")
# for HTML output:
htmlreg(tr, custom.model.names = colnames(est),
custom.note = "")
For example, the text output would look like this:
=============================================
a b c d e
---------------------------------------------
row 1 1.00 3.00 5.00 7.00 9.00
(0.10) (0.30) (0.50) (0.70) (0.90)
row 2 2.00 4.00 6.00 8.00 10.00
(0.20) (0.40) (0.60) (0.80) (1.00)
=============================================
You can as well omit the top, bottom and mid rules by specifying additional arguments to the screenreg function (inner.rule = ""
and outer.rule = ""
).
Note that you should have texreg
(>= 1.29.7) installed.
Two steps:
Create matrix with data in table
M <- matrix(as.vector(rbind(as.character(est),
paste("(",as.vector(se),")", sep="")
)
), nrow=4)
colnames(M) <- colnames(est)
Write matrix as latex or html table:
library(xtable)
print(xtable(M),type="latex") # or type="html"
See if the apsrtable package works for you. Depending on the kind of model object you have, this may be the solution. The package is quite easily extendable to other models too.
----------------- UPDATE
Why don't you just use a simple for loop and some paste commands? Probably easier to do something slightly hack-ish like this than to find a general solution.
est<-matrix(1:10,nrow=2)
colnames(est)<-c("a","b","c","d","e")
se<-matrix(seq(0.1,1,by=0.1),nrow=2)
colnames(se)<-c("a","b","c","d","e")
se <- apply(se, 2, function(i) paste('(', i, ')', sep=''))
output <- NULL
for (i in 1:nrow(est)){
output <- rbind(output, est[i,])
output <- rbind(output, se[i,])
}
output <- apply(output, 1, paste, collapse=' & ')
output <- paste(output, '\\\\')
cat(output, sep='\n')
精彩评论