开发者

Output a table with standard errors below estimates

开发者 https://www.devze.com 2023-02-17 23:47 出处:网络
So I\'ve got some parameter estimates like so est<-matrix(1:10,nrow=2) colnames(est)<-c(\"a\",\"b\",\"c\",\"d\",\"e\")

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')
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号