最佳可读形式的拟合glm模型

时间:2014-07-16 21:23:55

标签: r glm

在R中是否有一个函数可以打印glm的拟合结果函数的最终形式? 我想复制粘贴结果并在c#或java中使用它。

例如,这是我的模型:

set.seed(101)
g1=sin((1:1000)/60/pi)+runif(1000)^0.3
g2=cos((1:1000)/90/pi)+runif(1000)^0.3
gl=g1-g2+(g1*g2)+rnorm(10)/2
mymodel = lm(gl~poly(g1,3)+poly(g2,3)+poly(g1*g2,3))

我需要一个多项式函数方程来在其他应用程序中使用它。

1 个答案:

答案 0 :(得分:1)

这不是完全一般的,但可以解决您的具体问题,并且应该具有适应性。

我稍微修改了这个例子(特别是使用raw=TRUE):

set.seed(101)
g1=sin((1:1000)/60/pi)+runif(1000)^0.3
g2=cos((1:1000)/90/pi)+runif(1000)^0.3
gl=g1-g2+(g1*g2)+rnorm(10)/2
mymodel <- lm(gl~poly(g1,3,raw=TRUE)+
              poly(g2,3,raw=TRUE)+poly(g1*g2,3,raw=TRUE))

cc <- coef(mymodel)
pfun <- function(x,v) {
    paste(x,paste(v,seq(length(x)),sep="^"),sep="*",
         collapse="+")
}
pfun(1:3,"x")
## [1] "1*x^1+2*x^2+3*x^3"

strwrap(paste(c(cc[1],pfun(cc[2:4],"g1"),pfun(cc[5:7],"g2"),
      pfun(cc[8:10],"(g1*g2)")),collapse="+ "))
## [1] "-0.0503143118026683+"                                                                  
## [2] "1.04495433152782*g1^1+-0.212330489393473*g1^2+0.0378835573948955*g1^3+"                
## [3] "-1.0979460962483*g2^1+-0.240393392043387*g2^2+0.0724299094173384*g2^3+"                
## [4] "1.4803777033041*(g1*g2)^1+-0.0638557942781872*(g1*g2)^2+-0.00209039494007401*(g1*g2)^3"