为 R 中的多元回归转换变量

机器算法验证 r 回归 多重回归 数据转换
2022-02-13 03:46:59

我正在尝试在R. 但是,我的因变量具有以下情节:

DV

这是一个散点图矩阵,其中包含我的所有变量(WAR是因变量):

斯普洛姆

我知道我需要对这个变量(可能还有自变量?)进行转换,但我不确定所需的确切转换。有人可以指出我正确的方向吗?我很高兴提供有关自变量和因变量之间关系的任何其他信息。

我回归的诊断图形如下所示:

诊断图

编辑

使用 Yeo-Johnson 变换对因变量和自变量进行变换后,诊断图如下所示:

改造后

如果我使用带有日志链接的 GLM,则诊断图形为:

带有日志链接的 GLM

2个回答

John Fox 的书An R companion to Applied regression是关于应用回归建模的优秀资源Rcar我在这个答案中使用的包是随附的包这本书也有作为网站的附加章节。


转换响应(又名因变量,结果)

Box-Cox 变换提供了一种选择响应变换的可能方式。R在用函数拟合包含未转换变量的回归模型后lm,您可以使用boxCox中的函数通过最大似然估计(即功率参数)。因为您的因变量不是严格正数,所以 Box-Cox 转换将不起作用,您必须指定使用Yeo-Johnson 转换的选项(请参阅此处的原始论文和此相关帖子):carλfamily="yjPower"

boxCox(my.regression.model, family="yjPower", plotit = TRUE)

这会产生如下图:

Box-Cox lambdaplot

的最佳估计值是使轮廓似然最大化的值,在本例中约为 0.2。通常,的估计值会四舍五入到仍处于 95% 置信区间内的熟悉值,例如 -1、-1/2、0、1/3、1/2、1 或 2。λλ

现在要转换您的因变量,请使用包中的yjPower函数car

depvar.transformed <- yjPower(my.dependent.variable, lambda)

在函数中,lambda应该是您在使用之前找到然后用转换后的因变量再次拟合回归。λboxCox

重要提示:您应该考虑将 GLM 与对数链接相匹配,而不仅仅是对因变量进行对数转换。以下是一些提供更多信息的参考资料:first , second , third为此R,请使用glm

glm.mod <- glm(y~x1+x2, family=gaussian(link="log"))

y你的因变量在哪里x1x2等是你的自变量。


预测变量的转换

严格正预测变量的转换可以通过因变量转换后的最大似然来估计。为此,请使用包中的函数boxTidwellcar原始论文请参见此处)。像这样使用它:boxTidwell(y~x1+x2, other.x=~x3+x4). 这里重要的是该选项other.x指示被转换的回归项。这将是您所有的分类变量。该函数产生以下形式的输出:

boxTidwell(prestige ~ income + education, other.x=~ type + poly(women, 2), data=Prestige)

          Score Statistic   p-value MLE of lambda
income          -4.482406 0.0000074    -0.3476283
education        0.216991 0.8282154     1.2538274

在这种情况下,分数测试表明income应该转换变量。的最大似然估计λincome-0.348。这可以四舍五入到 -0.5,这类似于转换incomenew=1/incomeold.

网站上关于自变量转换的另一篇非常有趣的文章是这篇文章。


转换的缺点

虽然对数转换的因变量和/或自变量可以相对容易地解释,但其他更复杂的转换的解释不太直观(至少对我而言)。例如,您将如何解释因变量转换后的回归系数1/y? 这个网站上有很多帖子正好解决了这个问题:第一第二第三第四如果您使用λ直接来自 Box-Cox,没有四舍五入(例如λ=-0.382),解释回归系数更加困难。


建模非线性关系

拟合非线性关系的两种非常灵活的方法是分数多项式样条这三篇论文很好地介绍了这两种方法:第一第二第三还有一整关于分数多项式和R. R mfp实现了多变量分数多项式。该演示文稿可能会提供有关分数多项式的信息。要拟合样条曲线,您可以使用或函数中的函数gam(广义加法模型,请参阅此处以获取出色的介绍Rmgcvns包中的(自然三次样条)和bs(三次 B 样条) (有关这些函数的用法示例,splines请参见此处)。使用您可以使用函数gam使用样条线指定要拟合的预测变量:s()

my.gam <- gam(y~s(x1) + x2, family=gaussian())

在这里,x1将使用样条和x2线性拟合,就像在正常的线性回归中一样。在内部gam,您可以指定分布族和链接函数,如glm. 因此,要使用 log-link 函数拟合模型,您可以family=gaussian(link="log")gam中指定选项glm

看看这个网站上的帖子

您应该告诉我们更多关于您的响应(结果、因数)变量的性质。从您的第一个图开始,它强烈地呈正偏态,许多值接近零和一些负值。因此,这种转换可能会对您有所帮助,但并非不可避免,但最重要的问题是转换是否会使您的数据更接近线性关系。

请注意,响应的负值排除了直接对数变换,但不排除 log(response + constant),也不是具有对数链接的广义线性模型。

这个网站上有很多讨论日志(响应+常数)的答案,它划分了统计人员:有些人不喜欢它是临时的且难以使用,而另一些人则认为它是一种合法的设备。

仍然可以使用带有日志链接的 GLM。

或者,您的模型可能反映了某种混合过程,在这种情况下,更紧密地反映数据生成过程的自定义模型将是一个好主意。

(之后)

OP 有一个因变量 WAR,其值大约在 100 到 -2 之间。为了克服取零或负值的对数的问题,OP 提出了一个零和负数到 0.000001 的软糖。现在在对数刻度(以 10 为底)上,这些值的范围从大约 2(100 左右)到 -6(0.000001)。对数尺度上的少数捏造点现在是少数大规模异常值。将 log_10(fudged WAR) 与其他任何东西对比以查看这一点。