我在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
答案 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)
}