我使用名为的回归方法MARS,R它被称为earth并位于包earth中,以便为我的数据找到最佳回归模型。
我知道这种方法适用于大型数据集,可以处理NA并决定哪些变量将被使用,哪些不进入回归。
我在做什么
在估计回归后,我检测outliers使用boxplot ,然后从数据中消除观察结果extreme values并再次计算模型。
我这样做直到找到最大的grsq和rsq。
代码
model <- earth(log(price) ~ ., data = data, weights = weights)
max_grsq <- round(model$grsq, digits = 4)
max_rsq <- round(model$rsq, digits = 4)
min_diff <- abs(max_grsq - max_rsq)
while(!done) {
residuals_abs <- abs(model$residuals)
boxplot <- boxplot(residuals_abs, plot=F)
indexes_to_remove <- c(which((residuals_abs > boxplot$stats[4]) == T), which((residuals_abs < boxplot$stats[2]) == T))
if (length(indexes_to_remove) > 0) {
data <- data[-indexes_to_remove, ]
distances <- distances[-indexes_to_remove]
weights <- (1/distances)/(sum(1/distances))
}
tempModel <- earth(log(price) ~ ., data = data, weights = weights)
temp_grsq <- round(tempModel$grsq, digits = 4)
temp_rsq <- round(tempModel$rsq, digits = 4)
temp_diff <- abs(temp_grsq - temp_rsq)
if ((temp_grsq > max_grsq && temp_rsq >= max_rsq) || (temp_grsq >= max_grsq && temp_rsq > max_rsq)) {
model <- tempModel
max_grsq <- temp_grsq
max_rsq <- temp_rsq
min_diff <- temp_diff
} else {
done = T
}
}
问题
我不是统计学家,所以我不知道有什么更好的方法来去除异常值。
- 我的方法正确吗?
- 我应该使用另一种方法吗?
- 我知道有坏异常值和好异常值(杠杆点),我怎样才能只删除坏异常值?
- 我正在使用
semi-log form回归的。因为dummy variables我不能使用log-log form. 有没有其他的数据转换方法?还是我应该标准化数据?x <- (x - x_min)/(x_max - x_min)
有人有一些提示吗?