【问题标题】:Likelihood ratio test in RR中的似然比检验
【发布时间】:2018-08-11 19:27:18
【问题描述】:

我有 2 个在 R 中运行的线性模型

model_1_regression <- lm(model_1$ff4f_actual_excess_return_month1 ~ model_1$Rm.Rf + 
                         model_1$SMB + 
                         model_1$HML + 
                         model_1$MOM, 
                         na.action=na.exclude)

model_1_mom_1_regression <- lm(model_1_mom_1$ff4f_actual_excess_return_month1 ~ model_1_mom_1$Rm.Rf + 
                               model_1_mom_1$SMB + 
                               model_1_mom_1$HML + 
                               model_1_mom_1$MOM +
                               model_1_mom_1$mom_to_add,
                               na.action=na.omit)

我想进行似然比检验,看看添加的附加因素是否显着。我该怎么做?如何解释显示的结果?

非常感谢

【问题讨论】:

标签: r testing finance log-likelihood


【解决方案1】:

要比较嵌套模型,您可以使用不同的标准,包括 LRT 或 ANOVA 的 p 值、Adjusted-R2、AIC、BIC 等。 LRT 和 ANOVA 在检测差异方面会产生相同的结果。简而言之,从这两个检验中获得低于所选显着性水平的 p 值表明有足够的证据支持拒绝声称两个模型等效的零假设。我建议您搜索其他信息和理论。

您的代码包含不同的数据(model_1 & model_1_mom_1)和NA 处理(na.exclude & na.omit ),这让我怀疑你的模型是否真的是嵌套。请确保您通过为两个函数提供相同的数据集和NA 处理选项来使用相同的数据来拟合模型。然后就可以使用anova

# refactored your code and supplied the same data & na.action

reduced_model <- lm(formula = ff4f_actual_excess_return_month1 ~ 
                      Rm.Rf + 
                      SMB + 
                      HML + 
                      MOM,
                    data = df,
                    na.action=na.omit)

full_model <- lm(formula = ff4f_actual_excess_return_month1 ~ 
                   Rm.Rf + 
                   SMB + 
                   HML + 
                   MOM +
                   mom_to_add,
                 data = df,
                 na.action=na.omit)

# based on f-test
anova(reduced_model, full_model)

# based on chi-square test
anova(reduced_model, full_model, test = "LRT")

请注意,R 中还有其他用于运行 LRT 的函数,例如 lrtest,但它计算测试统计量的方式略有不同。您可以根据您的上下文采用其中一种。更多信息请参考这里:
https://stats.stackexchange.com/questions/155474/r-why-does-lrtest-not-match-anovatest-lrt

【讨论】:

    【解决方案2】:

    下面是如何使用R 为嵌套模型实现对数似然比检验:

    set.seed(123)
    # generated dummy data
    n <- 1000
    df <- data.frame(
        Rm.Rf = runif(n), 
        SMB = rnorm(n),
        HML = runif(n),
        MOM = rnorm(n),
        mom_to_add = runif(n)
    )
    df$ff4f_actual_excess_return_month1 <- 2*df$Rm.Rf - 36*df$SMB + 5*df$HML + 20*df$MOM + 0.5*df$mom_to_add + rnorm(n)
    
    nested <- lm(formula = ff4f_actual_excess_return_month1 ~ 
                           Rm.Rf + SMB + HML + MOM,
                           data = df,
                           na.action=na.omit)
    complex <- lm(formula = ff4f_actual_excess_return_month1 ~ 
                            Rm.Rf + SMB + HML + MOM + mom_to_add,
                     data = df,
                     na.action=na.omit)
    
    teststat <- -2 * (as.numeric(logLik(nested))-as.numeric(logLik(complex)))
    teststat
    # [1] 5.656315
    p.val <- pchisq(teststat, df = 1, lower.tail = FALSE)     # teststat ~ χ2(1) by Wilks theorem
    p.val
    # [1] 0.01739263
    

    我们可以绘制上面得到的结果,注意到原假设H0可以被拒绝,这样我们就可以得出复杂模型更好地解释数据的结论。

    alpha <- 0.05
    x <- seq(0, 6, 0.01)
    plot(x, dchisq(x, df=1), type='l', lwd=2, xlab='', ylab='')
    abline(v = qchisq(1-alpha, df=1), col='red', lwd=2, lty=2)
    points(teststat, 0, col='green', pch=19, cex=2)
    legend('topright', c("χ2(1)", "α=0.05", "tstat"), 
            col = c('black', 'red', 'green'), 
            pch = c(NA, NA, 19), lwd = c(2, 2, NA), lty = c(1, 2, NA))
    

    【讨论】:

      猜你喜欢
      • 2018-08-10
      • 2018-02-15
      • 2016-11-09
      • 2015-01-21
      • 1970-01-01
      • 1970-01-01
      • 2014-07-11
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多