Уважаемый пользователь, начинающий заходить на сайтR: Как создать таблицу хороших результатов (sjPlot) из последовательного вывода нескольких GLM?
Я работаю над исследованием в 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
У любых из вас есть аккуратное и элегантное решение моей проблемы?
спасибо, что заблаговременно!
'do.call (what = sjt.glm, args = c (results, file =" LoopSwissFits.html "))'? – Gregor
Работает ли это для вас? Когда я запускаю его, я получаю только Ошибка в eval (x $ expr, data, x $ env): имена переменных ограничены 10000 байтами – TAH