在lm的包装函数中修改权重参数

时间:2018-07-02 19:05:25

标签: r parameter-passing lm

我在R中有一个lm的包装函数。在将权重参数传递给lm之前,我想对其进行修改。有没有办法做到这一点?

例如,包装器函数myfunc应该将权重重置为1,从而赋予与未加权的lm相同的系数。但是,这不会在这里发生:

#Load data
library(MASS)
data(Boston)

#Wrapper function for lm
myfunc <- function(formula, data, ...){
  if (!is.null(weights)){
    weights <- rep(1, nrow(data))
  }
  fit <- lm(formula, data, ...)
  return(fit)
}

#Build functions
myfunc('medv ~ .', Boston)
Call:
lm(formula = formula, data = data)

Coefficients:
(Intercept)         crim           zn        indus         chas          nox           rm          age  
  3.646e+01   -1.080e-01    4.642e-02    2.056e-02    2.687e+00   -1.777e+01    3.810e+00    6.922e-04  
        dis          rad          tax      ptratio        black        lstat  
 -1.476e+00    3.060e-01   -1.233e-02   -9.527e-01    9.312e-03   -5.248e-01  

myfunc('medv~.', Boston, weights=Boston$crim)
Call:
lm(formula = formula, data = data, weights = ..1)

Coefficients:
(Intercept)         crim           zn        indus         chas          nox           rm          age  
  83.809053    -0.117041     0.115602    -0.053765    10.245815   -38.463510    -0.580526     0.035360  
        dis          rad          tax      ptratio        black        lstat  
  -2.163867     0.265246    -0.008546    -1.311419     0.003468    -0.568235  

1 个答案:

答案 0 :(得分:2)

您实际上从未将权重向量传递给lm()...不仅传递函数中存在的任何变量。而且,您实际上无法在...中修改变量。如果要更改它们,则需要捕获它们。

myfunc <- function(formula, data, weights=NULL, ...){
  formula <- as.formula(formula)
  environment(formula) <- environment()
  if (!is.null(weights)){
    weights <- rep(1, nrow(data))
  }
  fit <- lm(formula, data, weights=weights, ...)
  return(fit)
}