【问题标题】:Function that displays a text for the equation of a linear model显示线性模型方程文本的函数
【发布时间】:2015-10-17 17:55:09
【问题描述】:

我想采用以下“eq”函数并从两个方面改进它:

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

  2. 所以它会使变量显示没有矩阵部分,即像这样:

    y == 0.29 + 0.18 * "b" + 0.4 * "c"

我的代码:

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"

【问题讨论】:

    标签: r text lm


    【解决方案1】:

    您可以使用一些 paste 和 parse 来做到这一点

    编辑

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

    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)
    

    【讨论】:

    • 感谢您的回答!你知道如何去掉“表达”部分吗?
    • 你想对结果做什么?我想你想要一个表达式,因为你的返回一个带有双“=”符号的“调用”?在这种形式中,如果您想将其作为标签添加到图表中,您可以这样做,例如plot(1, type="n"); text(1, eq(lm3, 2))
    • 但是,如果你只是想要文本输出,把parse(text=完全去掉,你只会得到一个字符串。
    • 嗯,好的。谢谢。我打算输出它,但我看到这个表达式对于绘图很有用。这种形式可能对未来的人更有用...
    猜你喜欢
    • 1970-01-01
    • 2021-10-17
    • 2016-12-05
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 2019-08-19
    • 1970-01-01
    相关资源
    最近更新 更多