转换变量以在R中进行多元回归


26

我正在尝试在中执行多元回归R。但是,我的因变量具有以下曲线:

数码相机

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

垃圾邮件

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

通过回归分析得出的诊断图形如下:

诊断图

编辑

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

改造后

如果我将GLM与日志链接一起使用,则诊断图形为:

具有日志链接的GLM


3
@ zglaa1大家好,欢迎光临。为什么您认为必须转换变量?第一步是使回归与原始变量相吻合,然后查看拟合度(残差等)。残差应该近似正态分布,而不是变量。也许您会发现这篇文章很有趣。
COOLSerdash

感谢您提供的链接和建议。我已经进行了回归分析,并且我知道需要根据以下图表变换变量:i.imgur.com/rbmu14M.jpg 我可以看到残差中的无偏性和恒定不变性。另外,它们也不正常。
zgall1 2013年

@COOLSerdash我看了一下链接。我具有统计学的基本背景,因此可以理解该讨论。但是,我的问题是,我实际应用所学技术的经验有限,因此我很难弄清楚要实际执行必要的转换需要使用数据(在Excel还是R中)的确切功能。
zgall1 2013年

感谢您的图片。您说这种拟合是次优的,这是绝对正确的。您能否用回归中的DV和IV生成散点图矩阵?可以R使用命令pairs(my.data, lower.panel = panel.smooth)where my.data来完成数据集。
COOLSerdash

2
转换的一般方法是Box-Cox转换。您可以执行以下操作:1. lm使用未转换的变量拟合回归模型。2.使用函数boxcox(my.lm.model)MASS估计包。该命令还会生成一个图形,您可以上传以方便我们使用。λ
COOLSerdash 2013年

Answers:


30

约翰·福克斯(John Fox)的书《应用回归的R伴侣》是使用进行应用回归建模的出色资源Rcar我在此答案中始终使用的软件包是随附的软件包。本书还作为网站带有其他章节。


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

Box-Cox转换为选择响应的转换提供了一种可能的方式。配件包含未转换的变量与回归模型后R功能lm,您可以使用该功能boxCoxcar估计最大似然(即功率参数)。因为您的因变量并非严格为正,所以Box-Cox转换将不起作用,您必须指定使用Yeo-Johnson转换的选项(请参阅此处的原始文章和相关文章):λ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。λλ

要立即改变你的因变量,使用函数yjPowercar包:

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

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

重要提示:您不仅应该考虑对因变量进行日志转换,还应考虑使GLM具有日志链接。以下是一些提供更多信息的参考:第一第二第三。为此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进行转换。最大似然估计的是-0.348。可以将其四舍五入为-0.5,类似于转换。λincomeincomenew=1/incomeold

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


转型的劣势

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


建模非线性关系

分数多项式样条曲线是两种非常适合非线性关系的灵活方法。这三篇论文很好地介绍了这两种方法:第一第二第三。还有一关于分数多项式和的整本书R。该R 程序包mfp实现了多元分数多项式。此演示文稿可能与分数多项式有关。要拟合样条曲线,您可以使用包装或函数中的函数gam(通用加性模型,请参见此处,获得出色的介绍R)。mgcvns包中的(自然三次样条)和bs(三次B样条)splines(请参见此处以了解这些功能的用法示例)。使用,gam您可以使用样条s()函数使用样条线指定要拟合的预测变量:

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

在这里,x1将使用样条曲线进行x2线性拟合,就像在正常的线性回归中一样。在内部,gam您可以像中指定分发系列和链接功能glm。所以,以适应日志链接功能的模型,你可以指定选项family=gaussian(link="log")gamglm

看一下这个网站上的帖子


1
很好的解释。我不知道显式Box-Cox确实是选择转换的最常用方法。如果算上以任何方式选择日志的人,我自己的疯狂猜测就是这是少数方法。那个挑剔的地方自然不会影响其他任何东西。
Nick Cox

@NickCox谢谢(您的答案为+1,顺便说一句)。Box-Cox是最常用的方法的说法来自John Fox的书。由于我没有足够的经验来判断该声明,因此我将其视为实物。我将删除该声明。
COOLSerdash 2013年

非常感谢您的详细说明。我将尝试将其应用于我的数据。
zgall1 2013年

@COOLSerdash使用您的详细演练,我将Box Cox转换应用于我的因变量然后是自变量,并具有以下诊断变量图-i.imgur.com/eO01djl.jpg显然,虽然有所改进,但似乎仍然可以是具有恒定可变性和公正性的问题,并且肯定存在正态性问题。我可以从这里去哪里?
zgall1

1
@ zgall1非常感谢您的反馈。嗯,是的,这些转换似乎并没有太大帮助:)。在这一点上,我很可能会尝试在mgcv包和中使用样条作为预测变量,并使用广义加性模型(GAM)gam。如果那没有帮助,我恐怕要死了。这里有些人比我经验丰富,也许他们可以为您提供更多建议。我也不了解棒球。也许有一个更合理的模型可以处理这些数据。
COOLSerdash

8

您应该向我们详细说明您的响应(结果,因变量)的性质。从您的第一个绘图开始,它强烈正偏,许多值接近零而有些负。由此看来,变换有可能但并非不可避免地会帮助您,但是最重要的问题是变换是否会使您的数据更接近线性关系。

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

这个站点上有很多讨论log(响应+常数)的答案,它把统计人员分为几类:有些人不喜欢它是临时性的,很难使用,而另一些人则把它视为合法的设备。

具有日志链接的GLM仍然可行。

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

(后来)

OP具有因变量WAR,其值的范围大约在100到-2之间。为了克服采用零或负值的对数的问题,OP提出了将零和负数设成0.000001的软键。现在以对数刻度(以10为底),这些值的范围从大约2(大约100)到-6(0.000001)。现在,以对数为单位的少数有偏差的点是少数大量异常值。将log_10(附加了WAR的内容)与其他任何内容相对应以查看此情况。


从上面的散点图可以看出,我使用的是棒球统计数据集。自变量WAR本质上是球员在职业生涯中在大联盟级别贡献的价值的累积量度。自变量AdjSLG,SOPct和BBPct是小联盟统计数据,通常被认为可以预测大联盟水平的成功。年龄变量是玩家产生小联盟统计数据的年龄。虚拟变量用于指示产生统计信息的次要联赛级别。
zgall1 2013年

关于负自变量(WAR)问题,由于有些复杂的原因,如果这样可以使转换过程更容易,则将它们重新编码为零是合理的。在此数据集的框架内,这是一个合理的过程。如果您希望我进一步介绍细节(警告-需要使用棒球术语),我很乐意这样做。
zgall1 2013年

1
似乎WAR是您的变量。您为我的断言提供了证据,这两个术语经常混淆,在本网站的其他地方对此有争议。我的建议不是将负值重新编码为零(对数据进行恶意处理),而是将GLM与日志链接一起使用。请假设我对棒球细节没有任何兴趣或了解。
Nick Cox

您是正确的,WAR是我的因变量。我将研究带有日志链接的GLM。谢谢你的建议。
zgall1 2013年

1
了解职业WAR的计算方式可能会有所帮助(也就是了解数据生成过程)。
Affine
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.