我有一系列lme4
模型,我想在 R 中针对不同子集中的不同结果运行(每个模型都在意向治疗 (ITT) 和按协议 (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()
我希望我遗漏了一些明显但无法解决的问题,我们将不胜感激地收到任何指示/建议。