R:使用as.formula修复模型中的模型调用

R:使用as.formula修复模型中的模型调用,r,formula,regression,modeling,nlme,R,Formula,Regression,Modeling,Nlme,我有一个gls模型,其中我将一个公式(来自另一个对象)分配给该模型: equation <- as.formula(aic.obj[row,'model']) > equation temp.avg ~ I(year - 1950) mod1 <- gls(equation, data = dat) > mod1 Generalized least squares fit by maximum likelihood Model: equation Data:

我有一个
gls
模型,其中我将一个公式(来自另一个对象)分配给该模型:

equation <- as.formula(aic.obj[row,'model'])
> equation
temp.avg ~ I(year - 1950)
mod1 <- gls(equation, data = dat)

> mod1
Generalized least squares fit by maximum likelihood
  Model: equation 
  Data: dat 
  Log-likelihood: -2109.276
方程
一级平均温度(1950年)
mod1 mod1
广义最小二乘极大似然拟合
模型:方程
数据:dat
对数可能性:-2109.276

然而我不希望“模型”是“方程式”,而是方程式本身!我该怎么做呢?

这很标准,即使是
lm
也会这么做。一种方法是:劫持
print.gls
函数

library('nlme')

(form <- follicles ~ sin(2*pi*Time) + cos(2*pi*Time))
# follicles ~ sin(2 * pi * Time) + cos(2 * pi * Time)

(fm1 <- gls(form, Ovary))

# Generalized least squares fit by REML
#   Model: form
#   Data: Ovary 
#   Log-restricted-likelihood: -898.434
# 
# Coefficients:
#   (Intercept) sin(2 * pi * Time) cos(2 * pi * Time) 
#    12.2155822         -3.3396116         -0.8697358 
# 
# Degrees of freedom: 308 total; 305 residual
# Residual standard error: 4.486121 

print.gls <- function(x, ...) {
  x$call$model <- get(as.character(x$call$model))
  nlme:::print.gls(x, ...)
}

fm1

# Generalized least squares fit by REML
#   Model: follicles ~ sin(2 * pi * Time) + cos(2 * pi * Time) 
#   Data: Ovary 
#   Log-restricted-likelihood: -898.434
# 
# Coefficients:
#   (Intercept) sin(2 * pi * Time) cos(2 * pi * Time) 
#    12.2155822         -3.3396116         -0.8697358 
# 
# Degrees of freedom: 308 total; 305 residual
# Residual standard error: 4.486121 
库('nlme')

(form您可以巧妙地使用语言混乱来解决这个问题。这将创建(未计算的)
gls
调用,直接插入模型方程,然后对其进行计算

cl <- substitute(gls(.equation, data=dat), list(.equation=equation))
mod1 <- eval(cl)

cl这太棒了!简单而且完成了任务。你能解释一下它到底在做什么吗?我很感兴趣,这样我就能了解它更广泛的应用。谢谢!