更改计算最佳拟合线的方法
Changing the method of calculating the line of best fit
在使用 R 的 lm()
函数计算最适合我的数据的直线时,我 运行 遇到了一个问题:我的数据集中的一个或两个主要异常值正在强制直线无法帮助我理解我的数据的地方。
我的目标是更改 lm()
用于计算从残差平方和到 残差绝对值总和的直线的方法 .
有人知道怎么做吗?
我将建议另一种方法,稳健的线性模型;这些不使用绝对偏差的平均值(或总和),而是降低异常值的影响。 MASS::rlm
与 lm
具有基本相同的语法:这里我在 ggplot
上下文中对其进行说明。
您还可以使用 robustbase::lmrob()
来实现相同方法的不同实现,或者(如 G. Grothendieck 所建议的那样)quantreg::rq()
来拟合中位数的直线模型(基本上与您首先要求的内容相对应,即 MAD 回归)。
library(MASS)
set.seed(101)
## generate correlated data (positive slope)
dd <- as.data.frame(MASS::mvrnorm(20, mu=c(0,0),
Sigma=matrix(c(1,0.95,0.95,1),2)))
dd <- rbind(dd, c(5,-5)) ## add an outlier
library(ggplot2); theme_set(theme_classic())
ggplot(dd, aes(V1,V2)) +
geom_point() + geom_smooth(method="lm") +
geom_smooth(method="rlm", colour="red")
在使用 R 的 lm()
函数计算最适合我的数据的直线时,我 运行 遇到了一个问题:我的数据集中的一个或两个主要异常值正在强制直线无法帮助我理解我的数据的地方。
我的目标是更改 lm()
用于计算从残差平方和到 残差绝对值总和的直线的方法 .
有人知道怎么做吗?
我将建议另一种方法,稳健的线性模型;这些不使用绝对偏差的平均值(或总和),而是降低异常值的影响。 MASS::rlm
与 lm
具有基本相同的语法:这里我在 ggplot
上下文中对其进行说明。
您还可以使用 robustbase::lmrob()
来实现相同方法的不同实现,或者(如 G. Grothendieck 所建议的那样)quantreg::rq()
来拟合中位数的直线模型(基本上与您首先要求的内容相对应,即 MAD 回归)。
library(MASS)
set.seed(101)
## generate correlated data (positive slope)
dd <- as.data.frame(MASS::mvrnorm(20, mu=c(0,0),
Sigma=matrix(c(1,0.95,0.95,1),2)))
dd <- rbind(dd, c(5,-5)) ## add an outlier
library(ggplot2); theme_set(theme_classic())
ggplot(dd, aes(V1,V2)) +
geom_point() + geom_smooth(method="lm") +
geom_smooth(method="rlm", colour="red")