编写/应用“减去均值”函数来标准化回归参数

时间:2017-08-23 13:02:47

标签: r function parameters regression centering

我试图编写并应用一个看似简单的函数来标准化我的连续回归参数/预测变量。原因是我想处理多重共线性。

所以不是每次都写x-mean(x,na.rm=T),而是寻找一些更方便的东西,这对我有用 - 尤其是因为我想在R中练习写作函数;)

所以这就是我的尝试:

fun <- function(data.frame, x){
data.frame$x - mean(data.frame$x, na.rm=T)
}

显然这不是太错了。至少它不会返回错误消息。

但是,将fun应用于内置的mtcars数据集,例如变量disp会产生以下错误消息:

#Loading the data:
 data("mtcars")

fun(mtcars,x=disp) #I tried several ways, e.g. w and w/o "mtcars" in front

Warning message:
 In mean.default(mtcars$x, na.rm = T) :
  argument is not numeric or logical: returning NA

我的猜测是它是关于我如何应用这个函数的,因为当我手动执行该函数应该做的事情时,它可以很好地工作。

另外,我正在寻找有关编写和应用此类函数的类似问题(也超出了堆栈交换领域),但我没有找到任何有用的信息。

希望我没有因为我的新手R技能而犯错误。

1 个答案:

答案 0 :(得分:1)

R中已有一个功能可以执行您想要执行的操作:scale()。 你可以写scale(mtcars$hp, center = TRUE, scale = FALSE),然后从矢量本身中减去矢量的平均值。

结合应用,这是强大的;例如,您可以通过编写以下内容来居中数据框的每一列:

apply(dataframe, MARGIN = 2, FUN = scale, center = TRUE, scale = FALSE)

在此之前,您必须确保这是您的列的有效功能。例如,您无法缩放因子或字符。

关于你的问题:你的功能应该是这样的:

fun <- function(data.frame, x){
  data.frame[[x]] - mean(data.frame[[x]], na.rm=T)
}

然后在指定函数时,您必须编写fun(mtcars, "hp")并在引号中指定变量名。这是因为$运算符的特殊方式,您不能在其后使用字符串。