我正在尝试在R
. 但是,我的因变量具有以下情节:
这是一个散点图矩阵,其中包含我的所有变量(WAR
是因变量):
我知道我需要对这个变量(可能还有自变量?)进行转换,但我不确定所需的确切转换。有人可以指出我正确的方向吗?我很高兴提供有关自变量和因变量之间关系的任何其他信息。
我回归的诊断图形如下所示:
编辑
使用 Yeo-Johnson 变换对因变量和自变量进行变换后,诊断图如下所示:
如果我使用带有日志链接的 GLM,则诊断图形为:
我正在尝试在R
. 但是,我的因变量具有以下情节:
这是一个散点图矩阵,其中包含我的所有变量(WAR
是因变量):
我知道我需要对这个变量(可能还有自变量?)进行转换,但我不确定所需的确切转换。有人可以指出我正确的方向吗?我很高兴提供有关自变量和因变量之间关系的任何其他信息。
我回归的诊断图形如下所示:
编辑
使用 Yeo-Johnson 变换对因变量和自变量进行变换后,诊断图如下所示:
如果我使用带有日志链接的 GLM,则诊断图形为:
John Fox 的书An R companion to Applied regression是关于应用回归建模的优秀资源R
。car
我在这个答案中使用的包是随附的包。这本书也有作为网站的附加章节。
Box-Cox 变换提供了一种选择响应变换的可能方式。R
在用函数拟合包含未转换变量的回归模型后lm
,您可以使用包boxCox
中的函数通过最大似然估计(即功率参数)。因为您的因变量不是严格正数,所以 Box-Cox 转换将不起作用,您必须指定使用Yeo-Johnson 转换的选项(请参阅此处的原始论文和此相关帖子):car
family="yjPower"
boxCox(my.regression.model, family="yjPower", plotit = TRUE)
这会产生如下图:
的最佳估计值是使轮廓似然最大化的值,在本例中约为 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
你的因变量在哪里x1
,x2
等是你的自变量。
严格正预测变量的转换可以通过因变量转换后的最大似然来估计。为此,请使用包中的函数boxTidwell
(car
原始论文请参见此处)。像这样使用它: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,这类似于转换.
网站上关于自变量转换的另一篇非常有趣的文章是这篇文章。
虽然对数转换的因变量和/或自变量可以相对容易地解释,但其他更复杂的转换的解释不太直观(至少对我而言)。例如,您将如何解释因变量转换后的回归系数? 这个网站上有很多帖子正好解决了这个问题:第一、第二、第三、第四。如果您使用直接来自 Box-Cox,没有四舍五入(例如=-0.382),解释回归系数更加困难。
拟合非线性关系的两种非常灵活的方法是分数多项式和样条。这三篇论文很好地介绍了这两种方法:第一、第二和第三。还有一整本关于分数多项式和R
. 该R
包mfp
实现了多变量分数多项式。该演示文稿可能会提供有关分数多项式的信息。要拟合样条曲线,您可以使用包或函数中的函数gam
(广义加法模型,请参阅此处以获取出色的介绍R
)mgcv
ns
包中的(自然三次样条)和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) 与其他任何东西对比以查看这一点。