2013-10-12 4 views
6

Когда мы вписываемся статистическая модель в R, скажутПреобразования формулы формата R математического уравнения

lm(y ~ x, data=dat) 

Мы используем специальную формулу синтаксис R в: «у ~ х»

Есть ли что-то, что переходит из таких формулу к соответствующему уравнению? В этом случае это может быть указано как:

y = B0 + B1*x 

Это было бы очень полезно! Во-первых, потому что с более сложными формулами я не доверяю своему переводу. Во-вторых, в научных статьях, написанных с помощью R/Sweave/knitr, иногда модель должна сообщаться в форме уравнения и для полностью воспроизводимых исследований, мы хотели бы сделать это автоматическим способом.

+0

Этот вопрос не соответствует теме, потому что речь идет о статистике – Metrics

+0

Речь идет о том, как язык программирования R обрабатывает формулы, поэтому я думал, что это вопрос программирования, но как вы думаете, лучше для CrossValidated? –

+1

Возможный дубликат [ggplot2: добавление уравнения регрессионной линии и R2 на графике] (http://stackoverflow.com/questions/7549694/ggplot2-adding-regression-line-equation-and-r2-on-graph) – nograpes

ответ

2

Просто был быстро играть и получил эту работу:

# define a function to take a linear regression 
# (anything that supports coef() and terms() should work) 
expr.from.lm <- function (fit) { 
    # the terms we're interested in 
    con <- names(coef(fit)) 
    # current expression (built from the inside out) 
    expr <- quote(epsilon) 
    # prepend expressions, working from the last symbol backwards 
    for (i in length(con):1) { 
    if (con[[i]] == '(Intercept)') 
     expr <- bquote(beta[.(i-1)] + .(expr)) 
    else 
     expr <- bquote(beta[.(i-1)] * .(as.symbol(con[[i]])) + .(expr)) 
    } 
    # add in response 
    expr <- bquote(.(terms(fit)[[2]]) == .(expr)) 
    # convert to expression (for easy plotting) 
    as.expression(expr) 
} 

# generate and fit dummy data 
df <- data.frame(iq=rnorm(10), sex=runif(10) < 0.5, weight=rnorm(10), height=rnorm(10)) 
f <- lm(iq ~ sex + weight + height, df) 
# plot with our expression as the title 
plot(resid(f), main=expr.from.lm(f)) 

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

Смежные вопросы