显示线性模型方程式文本的函数

时间:2015-10-17 17:55:09

标签: r text lm

我想采用以下“eq”功能并以两种方式改进它:

  1. 因此它可以运行任意数量的系数

  2. 因此它会使变量显示而没有矩阵部分,例如:

    y == 0.29 + 0.18 *“b”+ 0.4 *“c”

  3. 我的代码:

    x=data.frame(runif(12),rep(c('a','b','c'),4))
    lm3=lm(x[,1]~x[,2])
    eq=function(c){
    bquote( y == .(c[1]) + .(c[2]) * .(names(c)[2])
            + .(c[3]) * .(names(c)[3])) }
    c=summary(lm3)$coefficients
    c=round(c[,1], digits = 2)
    c=summary(lm3)$coefficients
    c=round(c[,1], digits = 2)
    
        > eq(c)
        y == 0.29 + 0.18 * "x[, 2]b" + 0.4 * "x[, 2]c"
    

1 个答案:

答案 0 :(得分:2)

您可以使用某些pasteparse

来执行此操作

修改

我最初试图处理没有拦截的可能性,但是因为因子/非因子变量的可能性太混乱了,所以这只是假设截距。

eq <- function(fit, digits=2) {
    vnames <- attr(terms(fit), 'term.labels')
    x <- round(coef(fit), digits)
    ns <- Vectorize(gsub)(vnames, '', names(x), fixed=TRUE)[-1]  # remove intercept
    xx <- as.vector(x)
    vars <- c(xx[1], paste(xx[-1], ns, sep="*"))
    parse(text=paste0("y == ", paste(vars, collapse=" + ")))
}

## data
x <- data.frame(runif(12),rep(c('a','b','c'),4))
lm3 <- lm(x[,1]~x[,2])

eq(lm3, 2)
# expression(y == 0.35 + 0.21*b + 0.26*c)