lme4
さまざまなサブセットのさまざまな結果で R で実行したい一連のモデルがあります (各モデルは Intention To Treat (ITT) および Per-Protocol (PP) サブセットで実行され、さまざまな結果があります)。 texreg()
LaTeX テーブルを印刷して結果を比較し、ドキュメント内で適切に印刷するために使用しknitr
ます。
実行する微妙に異なるモデルがたくさんあるので、賢明なことは、モデルをワープtexreg()
して関数に呼び出すことであると考えました。そのために、私は書いています...
pleasant.regression <- function(data = proportion,
time.frame = "September 2013",
outcome = "unscheduled",
family = binomial,
caption = "ITT and PP Linear Mixed Effects Model Coefficients and Standard Errors for \\emph{any} Unscheduled Visits in September 2013.",
label = "logistic-unscheduled",
...){
## Require packages
require(lme4)
require(ResourceSelection)
require(texreg)
## Set defaults for texreg tables, can be modified with additional arguments
texreg.digits <- 2
texreg.table <- TRUE
texreg.caption.above <- TRUE
texreg.booktabs <- TRUE
texreg.dcolumn <- TRUE
texreg.use.packages <- FALSE
texreg.float.pos <- "!htpb"
texreg.ci.force <- TRUE
texreg.ci.test <- 0
## Parse the outcome into a formula with the desired mixed
## effects model
.formula <- reformulate(response = outcome, termlabels = c("allocation", "gender", "age", "n.unscheduled.2012", "(1 | pracid)"))
## Logistic Regresion
if(family == "binomial"){
## ITT
itt.mixed <- lmer(.formula,
data = subset(data,
period == time.frame & age.include == TRUE),
family = family)
## PP
pp.mixed <- lmer(.formula,
data = subset(data,
period == time.frame & age.include == TRUE & pp == 1),
family = family)
}
## Negative Binomial
else if(family == "negbin"){
## ITT
itt.mixed <- glmer.nb(.formula,
data = subset(data,
period == time.frame & age.include == TRUE))
## PP
pp.mixed <- glmer.nb(.formula,
data = subset(data,
period == time.frame & age.include == TRUE & pp == 1))
}
## Save table comparing ITT to PP using texreg()
results <- invisible(texreg(list(itt.mixed, pp.mixed),
custom.model.names = c("ITT", "PP"),
custom.coef.names = c("Intercept", "Allocation (Letter)", "Gender (Female)", "Age", "$N_{Unscheduled}$ September 2012"),
digits = texreg.digits,
caption = caption,
table = texreg.table,
caption.above = texreg.caption.above,
label = label,
booktabs = texreg.booktabs,
dcolumn = texreg.dcolumn,
use.packages = texreg.use.packages,
float.pos = texreg.float.pos,
ci.force = texreg.ci.force,
ci.test = texreg.ci.test))
return(results)
}
これを呼び出すと、 texreg() は関数内から結果を出力しますが、テーブルを出力用のオブジェクトとして返しません...
> my.results <- pleasant.regression(data = proportion,
time.frame = "September 2013",
outcome = "unscheduled",
family = "binomial",
caption = "ITT and PP Linear Mixed Effects Model Coefficients and Standard Errors for \\emph{any} Unscheduled Visits in September 2013.",
label = "logistic-unscheduled") ## Not expecting any output
Computing profile confidence intervals ...
Confidence intervals not available for this model. Using naive p values instead.
Computing profile confidence intervals ...
Confidence intervals not available for this model. Using naive p values instead.
\begin{table}[!htpb]
\caption{ITT and PP Linear Mixed Effects Model Coefficients and Standard Errors for \emph{any} Unscheduled Visits in September 2013. \textbf{NB} P-values are not explicitly calculated in favour of 95\% confidence intervals}
\begin{center}
\begin{tabular}{l D{.}{.}{5.11}@{} D{.}{.}{5.11}@{} }
\toprule
& \multicolumn{1}{c}{ITT} & \multicolumn{1}{c}{PP} \\
\midrule
Intercept & -0.73^{*} & -0.71^{*} \\
& [-0.95;\ -0.51] & [-0.95;\ -0.47] \\
Allocation (Letter) & -0.11 & -0.12 \\
& [-0.33;\ 0.12] & [-0.36;\ 0.12] \\
Gender (Female) & 0.06 & 0.06 \\
& [-0.03;\ 0.15] & [-0.03;\ 0.16] \\
Age & -0.01 & -0.01 \\
& [-0.03;\ 0.00] & [-0.03;\ 0.00] \\
$N_{Unscheduled}$ September 2012 & 1.18^{*} & 1.15^{*} \\
& [1.12;\ 1.25] & [1.08;\ 1.22] \\
\midrule
AIC & 12828.97 & 11597.78 \\
BIC & 12873.10 & 11641.29 \\
Log Likelihood & -6408.49 & -5792.89 \\
Deviance & 12816.97 & 11585.78 \\
Num. obs. & 11547 & 10415 \\
Number of Practices & 142 & 136 \\
Variance : Practice & 0.37 & 0.40 \\
Variance : Residual & 1.00 & 1.00 \\
\bottomrule
\multicolumn{3}{l}{\scriptsize{$^*$ 0 outside the confidence interval}}
\end{tabular}
\label{logistic-unscheduled}
\end{center}
\end{table}
> print(my.results) ## Would expect this to hold the above table and print it again
NULL
ここでStackOverflow スレッドに基づいてtexreg()
呼び出しをラップしようとしたため、結果が出力されずに返されましたが、期待どおりに機能していないようです。invisible()
明らかな何かが欠けていると思いますが、それを解決することはできません。ポインタ/提案はありがたく受け取ります。