与 OLS 回归相比,student-t 残差回归有什么好处?

机器算法验证 回归 t分布 指定错误 蓝色的 高斯马尔可夫定理
2022-04-07 04:16:58

有时,如果残差的分布是重尾的,我会看到建议使用student-t 残差拟合回归,而不是使用OLS(相当于假设正态分布的残差)。然而,由于 OLS 估计量是蓝色的(由 Gauss-Markov 提出),它的方差(因此 MSE)应该比假设 student-t 残差通过最大似然拟合的回归要低。即使残差确实是 t 分布的,也是如此。

在一个简单的模拟中(参见底部的 R 代码),OLS 和 t 回归在样本外 MSE 方面基本上是等效的,并且真实残差跟随学生-分布。如果 OLS 在预测(由 MSE 判断)或推理(由模型参数的 CI 覆盖率判断)等标准任务上表现相同,那么假设学生 t 误差拟合回归有什么优势?我不应该通过假设正确指定的可能性而不是错误指定的可能性来估计参数而受益吗?还是我的模拟具有误导性?β

对这篇文章的回答表明,如果没有使用 t 分布的误差,预测区间将是错误的。这真的是唯一的好处吗?

下面是模拟代码:

library(hett) # for fitting t-based regressions

get_regression_function <- function(beta) {
  reg_function <- function(x){
    beta[1] + beta[2] * x
  }
  return(reg_function)
}
get_t_prediction <- function(df, model) {
  t_beta_hat <- model$loc.fit$coefficients
  design_mat <- df$x
  intercept <- rep(1, length(df$x))
  design_mat <- cbind(intercept, design_mat)                 
  pred <- design_mat %*% as.matrix(t_beta_hat)
  return(pred)
}

get_ols_ci_coverage <- function(ols_fit, par_name, true_theta) {
  CI_mat <- confint(ols_fit)
  lw <- CI_mat[par_name, '2.5 %']
  up <- CI_mat[par_name, '97.5 %']
  cover_beta_1_ols <- (lw <= true_theta) & (true_theta <= up)
  return(cover_beta_1_ols)
}

get_t_ci_coverage <- function(t_fit, par_name, true_theta) {
  t_summary <- as.data.frame(summary(t_fit)$loc.summary$coefficients)
  t_pt_est <- t_summary[par_name, 'Estimate']
  t_se <- t_summary[par_name, 'Std. Error']
  t_ci <- t_pt_est + 1.96 * t_se * c(-1, 1)
  cover_t <- (t_ci[1] <= true_theta) &
    (true_theta <= t_ci[2])
  return(cover_t)
}

## simulation
true_beta_0 = 0.5
true_beta_1 = 1.5
reg_function <- get_regression_function(
  beta = c(true_beta_0, true_beta_1))

ssr_ols <- c()
ssr_t <- c()
ols_ci_coverage <- c()
t_ci_coverage <- c()

num_sims <- 10000
set.seed(1)
for (i in 1:num_sims){
  # Generate a dataset of size N
  N = 10000
  x <- rnorm(n = N, mean = 0, sd = 1)
  errors <- rt(N, df = 3)
  y_mean <- reg_function(x = x)
  y <- y_mean + errors
  df <- data.frame(y = y, x = x)
  df_train <- df[1:(N/2), ]
  df_test <- df[(N/2 + 1):N, ]
  
  # fit linear models
  OLS_fit <- lm(y ~ x, data = df_train)
  t_fit <- tlm(y ~ x,
               data = df_train)
  
  # generate test set predictions
  lm_pred <- predict(OLS_fit, newdata = df_test)
  t_pred <- get_t_prediction(
    df = df_test, model = t_fit)
  
  # test residuals
  lm_res <- lm_pred - df_test$y
  t_res <- t_pred - df_test$y
  
  # MSE -- test set
  ssr_ols[i] <- mean(lm_res^2)
  ssr_t[i] <- mean(t_res^2)
  
  # CI coverage for beta1
  ols_ci_coverage[i] <- get_ols_ci_coverage(
    ols_fit = OLS_fit, par_name = 'x', true_theta = true_beta_1)
  t_ci_coverage[i] <- get_t_ci_coverage(
    t_fit = t_fit, par_name = 'x', true_theta = true_beta_1)
}

mean(ssr_ols)
mean(ssr_t)
mean(ols_ci_coverage)
mean(t_ci_coverage)
4个回答

这是一个原因:

如果您使用最大似然拟合参数,并假设 t 分布误差,则拟合线受远离大部分数据(在 y 方向)的点的影响较小。

如果您有严重的尾部错误,如果您按最小二乘法拟合,很容易获得将线拉高(远离大量数据)的点。使用重尾误差分布会降低这些点的权重,这样它们就不会拉太多线。

但是,重要的是要注意,这种对 y 值中重尾的稳健性并不能提供对具有高影响的观察的保护。如果这可能是一个问题,那么您需要能够抵御有影响力的异常值的东西。[在您控制预测值的设计实验中,这可能不是问题,但您并不总是有设计实验。]

(您可能希望使用合适的模型来处理错误还有其他原因,例如更有效的参数估计和更合适的小样本推断的可能性。)


关于最小二乘为蓝色的观点有点误导。是的,它在线性无偏估计器中是最好的,但如果你的条件分布非常重尾,那么所有线性估计器都可能非常差,即使是任意的,并且拥有一个非常差的估计器集合中的最好的并不是安慰。如果您希望在存在重尾的情况下获得合理的效率水平,线性估计器不是一个好的选择。

然而,由于 OLS 估计量是蓝色的(由 Gauss-Markov 提出),它的方差(因此 MSE)应该比假设 student-t 残差通过最大似然拟合的回归要低。

假设 student-t 残差的估计量不是线性估计量。OLS 是线性无偏估计器中最好的。因此,这不包括学生 t 残差估计量。使用 student-t 残差的估计量的方差可以小于 OLS 估计量的方差。

student-t 估计器的优点是它对违反错误是高斯分布的假设更加鲁棒。在相对较高值的情况下,它可以具有比 OLS 估计器更低的方差。

一个极端而简单的例子是估计具有 1 个自由度的移位 t 分布的位置参数(与Ca​​uchy 分布相同)。在这种情况下,OLS 估计量是样本的平均值,并且具有未定义的方差。另一方面,柯西分布的 MLE 估计虽然难以计算,但方差较低

对这篇文章的回答表明,如果没有使用 t 分布的误差,预测区间将是错误的。这真的是唯一的好处吗?

的加权和分布之和的分布除非在极端情况下,这将很快接近正态分布,并且预测区间不会那么错误。yy

OLS 回归的弱点在于它对异常值极其敏感(异常点对损失函数的影响随着它们与回归线的距离的平方而增长)。使回归更稳健(即对异常值不那么敏感,请参阅稳健回归)的一种可能替代方法是使用对离群点给予较少权重的损失函数,例如Huber 损失Tukey 损失(另请参见M-estimator) .

具有长尾的 Student-t 分布也是具有明显优缺点的潜在候选者:

  • 它比 Huber 或 Tukey 损失函数更难分析
  • 它是一个真实的概率分布(与 Huber 和 Tukey 不同,它们在某种程度上是临时选择),并且可以平滑地拟合,例如贝叶斯方法。

Student-t Distribution是小样本的分布;相反:使用 OLS 的重要假设之一 - 是正态分布,这需要样本中的大量自变量......并且为了应对异常值 - 你最好增加样本数据的大小达到其正态性(当然,您可以从数据分析中删除异常值 - 另一种处理稳健变量的方法)...要检查数据的正态性,您可以使用 Shapiro-Wilk 正态性检验或 Kolmogorov–斯米尔诺夫测试...

无论如何,您无法比较 OLS 回归和测试残差 - 因为为了信任回归曲线的 R^2 分数(您正在使用 OLS 仪器) - 您必须在 OLS之后检查残差的正态性......

因此,OLS 对样本的结构和大小有相当严格的要求——正态性(数据和残差也是如此)......但如果你不能证明正态性,你最好使用 MLE(最大似然估计)而不是 OLS - 找出对您的经验数据更合适的分布... 还谈到 OLS - 它还要求在对数据依赖性的先验分析中明确定义 f(x),否则建议 MLE 找到最常见的理论曲线适合您的经验分布...

但是为了证明每个 X 的回归系数是有意义的 - 是的,你会看到每个回归模型系数的 t-Student 标准, - 除了找到的整个回归模型的 F 标准之外......

import statsmodels.api as sm
...
model= sm.OLS(y,x)
results= model.fit()
print(results.summary())

注意术语:t-Student 测试可用于不同的统计。具有不同意义的调查和 t-Student 分布可以描述“小样本”...