Как опубликовать (развернуть) формулы регрессии? - PullRequest
7 голосов
/ 17 июня 2011

Как мне правильно опубликовать формулу регрессии?

fit1<-dynlm(dep~indep1+indep2+indep3)
s1<-summary(fit1)
s1$call

Как я могу выпить s1$call?Я имею в виду, что я не хочу иметь что-то вроде `dynlm (формула = dep ~ indep1 + indep2 + indep3) ´ в моем документе PDF.Я предпочел бы иметь больше стиля учебника по сравнению с этим стилем вызова функции.Кроме того, я хотел бы (вручную?) Добавить перехват и errorterm к модели (потому что она на самом деле там).

Обратите внимание, что я нашел outreg в Google (что сейчас кажется слишком тяжеловесным) и не совсем соответствует моим потребностям с первого взгляда.

РЕДАКТИРОВАТЬ: Попытка опубликовать пример выходных данных, на самом деле я хотел бы, но я не знаю, как сделать это лучше с редактором SO:

 dep = alpha + beta_1*indep1 + beta_2*indep2 + beta_3*indep3 + epsilon

Некоторые матричные обозначения будуттакже будет хорошо, но печать определения модели была бы хороша независимо от того, как.Конечно, добавление его вручную также возможно, но когда вы находитесь на этапе проверки надежности, переменные модели могут часто меняться, и документация должна обновляться.

(Использование http://texify.com:)

img]http://www.texify.com/img/%5CLARGE%5C%21%5Cmbox%7Bdep%7D%20%3D%20%5Calpha%20%2B%20%5Cbeta_1%20%5Ccdot%20%5Cmbox%7Bindep1%7D%20%2B%20%5Cbeta_2%20%5Ccdot%20%5Cmbox%7Bindep2%7D%20%2B%20%5Cepsilon.gif[/img

Ответы [ 3 ]

5 голосов
/ 17 июня 2011

Этот файл Rnw:

\documentclass{article}
\begin{document}
<<>>=
data("USDistLag", package = "lmtest")
library(dynlm)
dfm1 <- dynlm(consumption ~ gnp + L(consumption), data = USDistLag)
@ 

<<echo=FALSE>>=
cc <-dfm1$call
f <- cc$formula
LHS <- as.character(f)[2]
RHS <- as.character(f)[3]
coefs <- gsub(" +","",strsplit(RHS,"\\+")[[1]])
mbox <- function(x) { paste("\\\\mbox{",x,"}",sep="") }
pars <- paste("\\\\beta_",0:(length(coefs)-1),sep="")
p <- paste(mbox(LHS),"=",paste(pars,mbox(coefs),sep=" \\\\cdot ",collapse="+"),
           "+ \\\\epsilon")
@ 

$$
\Sexpr{p}
$$
\end{document}

приводит к этому фрагменту TeX:

\documentclass{article}
\begin{document}
\begin{Schunk}
\begin{Sinput}
> data("USDistLag", package = "lmtest")
> library(dynlm)
> dfm1 <- dynlm(consumption ~ gnp + L(consumption), data = USDistLag)
\end{Sinput}
\end{Schunk}


$$
\mbox{consumption} = \beta_0 \cdot \mbox{gnp}+\beta_1 \cdot \mbox{L(consumption)} + \epsilon
$$
\end{document}
3 голосов
/ 17 июня 2011

Я нашел эту функцию, которую написал, когда брал вступительный класс для регрессионного моделирования.Я уверен, что это менее чем оптимально, но это работало достаточно хорошо для этого курса.Если ничего другого, возможно, это укажет вам правильное направление, чтобы двигаться дальше.

writeCoef <- function(x) {
  require(plyr)

    coefnames <- as.data.frame(coef(x))
    coefnames$betas <- row.names(coefnames) 
    coefnames <- adply(coefnames, 1, function(x) paste(round(x[1],3), x[2] , sep = " * "))

    dependent <- paste(as.character(x$call$formula)[2], " = ", sep = "")

    ret <- paste(dependent, paste(coefnames[,3], sep = "", collapse = " + "))
    ret <- gsub("\\*\\s\\(Intercept\\)", "", ret)
  return(ret)
    }

И в действии:

ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
group <- gl(2,10,20, labels=c("Ctl","Trt"))
weight <- c(ctl, trt)
lm.D9 <- lm(weight ~ group)

> writeCoef(lm.D9)
[1] "weight =  5.032 + -0.371 * groupTrt"
0 голосов
/ 06 мая 2016

Этот короткий файл Rnw демонстрирует распечатку длинной формулы регрессии с переносом на несколько строк:

\documentclass{article}
\usepackage{breqn}
\begin{document}
\SweaveOpts{concordance=TRUE}

<<Printmodel,echo=FALSE,results=tex>>=
#Specify any formula
model1 <- formula("outcome ~ (variable1 +variable2 + variable3 + variable4 + variable5 + variable6 )^2 + variable7 + variable8 + variable7 * variable8")

#Converts formula to LaTeX
cat(paste("\\begin{dmath*}\n",gsub("~","\\\\sim",deparse(model1,width.cutoff = 500L)),"\n\\end{dmath*}",sep=""))
@

\end{document}

В результате получается код LaTeX:

\begin{dmath*}
outcome \sim (variable1 + variable2 + variable3 + variable4 + variable5 + variable6)^2 + variable7 + variable8 + variable7 * variable8
\end{dmath*}

, который хорошо переносится на несколько строк, используя пакет breqn и среду dmath.

...