2

假设我有一个非正态分布的响应变量和一个解释变量。让我们首先创建这两个变量(用 R 编码):

set.seed(12)
resp = (rnorm(120)+20)^3.79
expl = rep(c(1,2,3,4),30)

我运行了一个线性模型,我意识到残差不是正态分布的。(我知道运行夏皮罗可能不足以证明残差不是正态分布的,但这不是我问题的重点)

m1=lm(resp~expl)
shapiro.test(residuals(m1))
0.01794

因此,我想转换我的解释变量(例如使用 Box-Cox 进行转换)。

m2=lm(resp^(1/3.79)~expl)
shapiro.test(residuals(m2))
0.4945

好的,现在我的残差是正态分布的,很好!我现在想对我的数据和模型进行图形表示。但是我不想以转换后的形式绘制我的解释变量,因为我会失去很多直观的含义。因此我这样做:

plot(x=expl,y=resp)

如果我现在想添加模型怎么办?我可以这样做

abline(m2) # m2 is the model with transformed variable

但当然这条线不适合所代表的数据。我可以这样做:

abline(m1) # m1 is the model with the original variable.

但这不是我为统计而运行的模型!如何重新转换预测的线以m2使其适合数据?

4

2 回答 2

2
plotexpl <- seq(1,4,length.out=10)
predresp <- predict(m2,newdata=list(expl=plotexpl))

lines(plotexpl, predresp^(3.79))

我不会在这里讨论统计问题(例如,非显着性测试并不意味着 H0 是正确的,并且您的模型并不比平均值好)。

于 2013-08-29T09:24:47.800 回答
0

既然您提到转换可能基于 Box-Cox 公式,我想指出一个您可能需要考虑的问题。

根据论文Box,George EP 中的 Box-cox 变换公式;考克斯博士 (1964)。“转换分析”您的转换实现(如果它是 Box-Cox 转换实现)可能需要稍微编辑。转换后的 y 应该是 (y^(lambda)-1)/lambda 而不是 y^(lambda )。(实际上,y^(lambda) 被称为 Tukey 变换,这是另一个不同的变换公式。)
所以,代码应该是:

lambda=3.79
m2=lm(resp^((lambda-1)/lambda)~expl)
shapiro.test(residuals(m2))

更多信息

如果我误解了您的实施,请纠正我。

于 2017-06-19T17:10:08.570 回答