car包中的三个函数改善线性与异方差性。

car包中的三个函数改善线性与异方差性。

在《R in action》一书中提及了car包中的三个函数powerTransform(),boxTidwell(),spreadLevelPlot()来改善线性与异方差性。

参考:https://blog.csdn.net/yujunbeta/article/details/9252883

这里三个变换得到的结果并不一致,powerTransform()给出的变幻是u=y^0.2773,boxcox()给出的变换是u=y^ 0.5353535,,boxTidwell()认为将x变换为z=x^1.517633线性性会有很好的改善。但是我们观察boxcox给出的图我们也很清楚的看到这三个结果都是可接受的,最后得到的结果都可以使得线性性极大地提高。至于选择哪一个,我们得从数据本身出发来通过舍入得到答案。还有变量除了幂次变换,logit变换,对数变换都是常用的。

最后提醒一下,谨慎对待变量变换,毕竟我们的回归并不一定以提高R^2为目的,特别是在经济学中。

引用《R in action》中的一段话来作为本节的结束:

  • The decision regarding when to try to improve the fit of an OLS regression model and when to try a different approach, is a complex one. It’s typically based on knowledge of the subject matter and an assessment of which approach will provide the best result.

forecast package的Boxcox方法是先用BoxCox.lambda函数自动筛选出最合适的lambda,然后用Boxcox进行普通的Box-cox变换,BoxCox.lambda这个函数用于数值向量或时间序列,可以得到\lambda的估计精确值。

而car package中的powerTransform要更复杂一些,这个函数是针对线性模型计算一个最优的\lambda ,采取的方法是最大似然估计。 使用这个函数的问题是只能对模型l寻找最优lambda,而且还得不到 lambda的估计的精确值。

函数powerTransform的exampleWool 是car包内置的数据集。 大概形式如下

len amp load cycles
1  250   8   40    674
2  250   8   45    370
3  250   8   50    292
4  250   9   40    338
5  250   9   45    266
6  250   9   50    210
​
p1 <- powerTransform(cycles ~ len + amp + load, Wool)
​
lm(bcPower(cycles, p1$roundlam) ~ len + amp + load, Wool)
​

Comments are closed.