繁体   English   中英

如何将lm对象中的权重作为变量从函数外部传递,并在模型表单中将列名称作为权重引用?

[英]How to pass weights in lm object as a variable from outside the function and refer the column name as weight in the model form?

我有一个函数为多个模型迭代创建lm对象,权重是函数的输入,它采用不同的列值。

这是假的:

x <-c(rnorm(10),NA)
df <- data.frame(y=1+2*x+rnorm(11)/2, x=x, wght1=1:11)

## Fancy weights as numeric vector

df$weight <- (df$wght1)^(3/4)
weight_var <- "weight"

model <-  lm(y~x,data=df,weights=df[, weight_var])

model$call[[4]]

看, model$call[[4]]返回df[, weight_var] ,我希望它返回列weight ; 这是对该变量的引用

假设我在数据中有列a,b,c,d,e,我想运行模型并检查权重是否为d或e。

因此,我将if语句定义为:

if (weight_var[[1]]=='') {
    model <- lm(formula = eqmodel, xdata)
  } else {
    model <- lm(formula = eqmodel, xdata, weights = xdata[,weight_var])
  }

其中weight_var可以是de 所以当我们打电话时:

model$call[[4]]

输出是de

但是,当我看到模型为:

Call:
lm(formula = eqmodel, data = xdata, weights = xdata[, weight_var])

我没关系,eqmodel是从函数外部指定的模型方程。 但是,我希望权重在传递时为d或e。 有办法吗?

更新

model $ call [[i]]逐个字母地返回lm()参数的值,因此不仅模型$ call [[4]]看起来没有信息,而且模型$ call [[2]]返回的是公式名称公式。 下面一个技巧来改善它一点点。

x <-c(rnorm(10),NA)
df <- data.frame(y=1+2*x+rnorm(11)/2, x=x, wght1=1:11)

## Fancy weights as numeric vector

df$weight <- (df$wght1)^(3/4)
weight_var <- "weight"
eqmodel <- as.formula("y~x")
xdata <- df

### unprocessed:
if (weight_var[[1]]=='') {
  model <- lm(formula = eqmodel, xdata)
} else {
  model <- lm(formula = eqmodel, xdata, weights = xdata[,weight_var])
}
summary(model)
#Call:
#lm(formula = eqmodel, data = xdata, weights = xdata[, weight_var])

### a little trick:
if (weight_var[[1]]=='') {
  model <- lm(formula = eqmodel, xdata)
} else {
  model <- lm(formula = eqmodel, xdata, weights = xdata[,weight_var])
  model$call[[4]] <- weight_var[[1]]
}
model$call[[2]] <- eqmodel
summary(model)

#Call:
#lm(formula = y ~ x, data = xdata, weights = "weight")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM