我想进行回归分析,我有一个数据集,其目标变量(Murder)向左倾斜,如下所示:
data("USAArrests")
str(USAArrests)
'data.frame': 50 obs. of 4 variables:
$ Murder : num 13.2 10 8.1 8.8 9 7.9 3.3 5.9 15.4 17.4 ...
$ Assault : int 236 263 294 190 276 204 110 238 335 211 ...
$ UrbanPop: int 58 48 80 50 91 78 77 72 80 60 ...
$ Rape : num 21.2 44.5 31 19.5 40.6 38.7 11.1 15.8 31.9 25.8 ...
hist(USAArrests&Murder)
由于数据是左偏斜的。我可以对目标进行对数转换,以提高模型的性能。
train = USArrests[1:30,]
train$Murder = log(train$Murder)
test = USArrests[31:50,]
如果我想将此模型应用于测试集,则必须逆向转换以获得实际结果。我可以通过exp
来做到这一点。
fit = lm(Murder~., data = train)
pred = predict(fit, test)
exp(pred)
但是,就我而言,对数转换不足以使目标呈正态分布。所以我用了约翰逊变换。
library(bestNormalize)
train$Murder = yeojohnson(train$Murder)$x.t
是否有可能像上面的log转换那样逆转这种转换?
答案 0 :(得分:0)
如Rui Barradas所述,此处可以使用predict
函数。您可以执行以下操作,而不是直接从x.t
函数中抽出yeojohnson
:
# Store the transformation object
yj_obj <- yeojohnson(train$Murder)
# Perform transformation
yj_vals <- predict(yj_obj)
# Reverse transformation
orig_vals <- predict(yj_obj, newdata = yj_vals, inverse = TRUE)
# Should be the same as the original values
all.equal(orig_vals, train$Murder)
可以通过log_x
函数(以及predict
函数和inverse = TRUE
参数)通过对数和幂转换来完成相同的工作流程。