有时在多元线性回归中,会有一个解释变量对解释力的贡献不大。然后,我们将对该变量执行转换,即取对数,按某个因子对其进行缩放等。突然间,这个变量现在具有解释能力,并被认为适合包含在模型中。
这是一个好习惯吗?即简单地转换一个变量以使其看起来具有解释力?领域经验是否指导变量需要做什么......即在转换后将其排除或包含?
有时在多元线性回归中,会有一个解释变量对解释力的贡献不大。然后,我们将对该变量执行转换,即取对数,按某个因子对其进行缩放等。突然间,这个变量现在具有解释能力,并被认为适合包含在模型中。
这是一个好习惯吗?即简单地转换一个变量以使其看起来具有解释力?领域经验是否指导变量需要做什么......即在转换后将其排除或包含?
这取决于您是纯粹主义者、实用主义者还是数据挖掘者。
纯粹主义者只会尝试一种转换,并且仅基于科学和先前的知识,并且将在收集(或查看)任何数据之前进行选择。这是最安全的方法,但也可以从数据中获得洞察力。
数据挖掘者将尝试每一种可能的转换,直到他们找到一个给他们想要的答案的转换。这可能会产生令人印象深刻的结果,但也会导致过度拟合模型和不可重现的结果。
实用主义者(最大和最有生产力的群体)认识到我们可以从数据中学到一些东西,但也对过度拟合数据持谨慎态度。他们将研究一些经过科学证明的可能变换,或者尝试具有合理平滑约束的样条曲线或其他平滑。他们还将做交叉验证之类的事情,以确保他们的实验没有导致过度拟合,如果有的话,他们会恢复原状。然后,他们还将诚实地说明他们所做的事情(解释在讨论中试验了哪些变换),并在后续研究中寻求验证。
我推荐务实的方法。
这是您所描述的合法做法。事实上,使所有变量都线性化是一种不必要的简化。通常,我们不知道变量之间的真实关系是什么,因此我们对它们进行线性建模。
如果你碰巧知道这些关系,通常是非线性的,那么一定要去做。
这是一个例子,真正的过程是. 首先我用它建模,然后使用适当的规格建模。在第一种情况下,系数不显着,在第二种情况下,它很重要。
MATLAB 代码:
rng(0);
x = (1:100)'/100*pi;
% data generating process
y = sin(x) + randn(100,1)/2;
% fit linear x
fit = fitlm(x,y)
% fit sin(x)
fit2 = fitlm(sin(x),y)
plot([y fit.Fitted fit2.Fitted])
legend({'actual' ,'fitted x','fitted sin x'})
输出:
fit =
Linear regression model:
y ~ 1 + x1
Estimated Coefficients:
Estimate SE tStat pValue
________ ________ _______ __________
(Intercept) 0.89621 0.12771 7.0177 2.9539e-10
x1 -0.12487 0.069885 -1.7868 0.077068
Number of observations: 100, Error degrees of freedom: 98
Root Mean Squared Error: 0.634
R-squared: 0.0315, Adjusted R-Squared 0.0217
F-statistic vs. constant model: 3.19, p-value = 0.0771
fit2 =
Linear regression model:
y ~ 1 + x1
Estimated Coefficients:
Estimate SE tStat pValue
________ _______ ______ __________
(Intercept) 0.13799 0.13389 1.0306 0.30527
x1 0.87991 0.18936 4.6468 1.0507e-05
Number of observations: 100, Error degrees of freedom: 98
Root Mean Squared Error: 0.583
R-squared: 0.181, Adjusted R-Squared 0.172
F-statistic vs. constant model: 21.6, p-value = 1.05e-05
这绝对是个好习惯!如果您的回答和解释变量之间的真实关系是对数,那么您的模型应该反映这一点。当然,我们永远无法确定真实关系的性质,所以我们会做一些事情,比如绘制数据或以不同的方式(有和没有对数转换)拟合模型并评估拟合。