2016-11-23 7 views
0

親愛なるStackoverflowのコミュニティR:いくつかのGLMのlapply出力から素晴らしい結果テーブル(sjPlot)を作成するにはどうすればよいですか?

私はRの研究に取り組んでいます。私はいくつかの二項ロジスティック回帰をさまざまな扶養家族で行っています。これらの分析はマイナーチェンジで繰り返し行われ、結果は私の同僚と、最適に見栄えの良いテーブルで、面倒なR結果ではなく共有しています。私がこれをほんの数回だけ行うつもりならば、すべての分析を単一の回帰として行い、次にsjt.glmを使って素敵なテーブルを作ることができます。これらの同様の分析を何度も繰り返していますが、ループアップを使用して処理を高速化して簡素化しています。残念ながら私はlappplyとsjt.glmを協力させることはできません。最適には、lapplyループから結果を取り出し、sjt.glmを使って水平に整列したテーブルを作成します。

は、例を参照してください(と醜いコーディングのため申し訳ありません)

library(sjPlot) 
    swiss$y1 <- ifelse(swiss$Fertility < median(swiss$Fertility), 0, 1) 
    swiss$y2 <- ifelse(swiss$Infant.Mortality < median(swiss$Infant.Mortality), 0, 1) 
    swiss$y3 <- ifelse(swiss$Agriculture < median(swiss$Agriculture), 0, 1) 

    #Normal slow way would be 
    fitOR1 <- glm(y1 ~ Education + Examination + Catholic, data = swiss, 
     family = binomial(link = "logit")) 
    fitOR2 <- glm(y2 ~ Education + Examination + Catholic, data = swiss, 
      family = binomial(link = "logit")) 
    fitOR3 <- glm(y3 ~ Education + Examination + Catholic, data = swiss, 
      family = binomial(link = "logit")) 

    #and then simply use summary and other formulas to look at the results 
    summary(fitOR1);exp(cbind(OR = coef(fitOR1), confint(fitOR1))) 

    #but with 20+ dependents, this would become tedious 

    #Doing the same analysis as a laply loop, is relatively easy (and non-tedious) 
    varlist <- names(swiss[c(7:9)]) 

    results <- lapply(varlist, function(x){ 
     glm(substitute(i ~ Education + Examination + Catholic, list(i=as.name(x))), 
    family =binomial, data = swiss)}) 

    for (i in 1:3) print(summary(results[[i]])) 
    for (i in 1:3) print(exp(cbind(OR = coef(results[[i]]), confint(results[[i]])))) 

    #Though here is the catch. To get the output/results into a nice table 
    #I can easily use sjt.glm for the "standard" single logistic regressions. 
    sjt.glm(fitOR1,fitOR2,fitOR3, file = "SwissFits.html") 

    #Though I can't think of how I could do this for the loop-results. 
    #The closest I have come is perhaps something like 
    for(i in 1:3)(sjt.glm(results[[i]],file="LoopSwissFits.html")) 

    #but then I only get the results from the last regression. 

    #One alternative is to do 
    lapply(varlist,function(x){ sjt.glm(
     glm(substitute(i ~ Education + Examination + Catholic, list(i=as.name(x))), 
    family =binomial, data = swiss), file = paste0("SwissFits_",(i=as.name(x)),".html"))}) 

    #but then I get three separate files, when it would be preferable to 
    #have the results in one horizontally oriented file 

あなたのいずれかが私の問題にきちんとしてエレガントな解決策を持っていますか?

ありがとうございます!

+0

'do.call(what = sjt.glm、args = c(results、file =" LoopSwissFits.html "))'? – Gregor

+0

あなたのために働きますか?私はそれを実行するときだけ私は得る eval(x $ expr、data、x $ env)のエラー: 変数名は10000バイトに制限されています – TAH

答えて

1

スタルマジャーパッケージはこれに適しています。書き込み関数を使用して結果をテキストファイルに格納します。 sjt.glm(results):コンソールに表示するために、単に

install.packages("stargazer") 
library(stargazer) 

stargazer(results, align = TRUE, type = "text") 

# To write to a word file 
write(stargazer(results, align = TRUE, type = "text"), "results.txt") 
+0

こんにちは、 "答え"として投稿された私の超長いコメントを参照してください。 – TAH

1

は、単に最初の引数としてリストを置きますuse-。

+0

それはうまくいった!そして、今私は私のオフィスに恥ずかしそうな顔をしています!どうもありがとうございました!なぜ私はちょうどそれを試していないのか分かりません.... – TAH

0

@code_is_entropy。

Stargazerは素晴らしいですが、expcoef = Tを追加すると誤ったCIが表示されてしまいます。残念ながら、ループの使用時に修正する方法がわかりません。

library(stargazer);library(sjPlot) 
mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv") 
varlist <- names(mydata[c(2:4)]) 
results <- lapply(varlist, function(x){ 
glm(substitute(admit ~i, list(i=as.name(x))), 
    family =binomial, data = mydata)}) 

stargazer(results, apply.coef = exp, align = TRUE, 
column.labels = varlist, model.names = T, ci = T, type = "text") 
#vs 
sjt.glm(results,digits.est = 5, digits.ci = 5,p.numeric = T, digits.p=5) 
#vs 
for (i in 1:3)print (exp(confint(results[[i]]))) 

あなたはEXP(confint)からの結果の結果、sjt.glmとスターゲイザーを比較するのであれば、あなたがそのスターゲイザーの信頼区間を参照してくださいだけの道オフになっている例を参照してください。

私はコメントとして回答を投稿して申し訳ありません、私はちょうど適切な例を与えるために文字数を超えなければなりませんでした。

関連する問題