如何计算时间序列趋势为正的置信度?

机器算法验证 时间序列 置信区间 估计 趋势
2022-03-29 22:45:57

每年都会随机询问 10,000 人是否喜欢苹果。结果是:

Year    % likes apples
2013    4.4%
2014    4.1%
2015    5.5%
2016    6.3%
2017    5.4%
2018    6.0%

标准偏差 = 0.87%

使用数据,我想说:

  • 我们可以 X% 的信心认为,在 2013 年至 2018 年期间,喜欢苹果的人比例有所增加。
  • 我们有 95% 的把握认为,在 2013 年至 2018 年间,喜欢苹果的人的比例至少增加了 Y%。

但我不知道如何计算 X 和 Y 的值。

我对此感到很困惑。线性趋势估计似乎是这里的相关概念,但我还没有设法理解如何应用它。

3个回答

您描述的数据可能被视为汇总统计数据。某人是否喜欢苹果可以被认为是二元结果(1 = 喜欢苹果,0 = 不喜欢苹果)。因此,如果您在 6 年内对 10,000 人进行调查,那么您将有 60,000 条回答来衡量每个人是否喜欢苹果的二元结果。

有人喜欢苹果的概率实际上是二项式结果的平均值。这很重要,主要有两个原因:

  1. 样本量远大于您提供的汇总统计数据,因此您对结果的信心应该比汇总统计数据的线性回归所表明的要高得多

  2. 数据的二元性质应引导您考虑逻辑回归。

我没有完整的数据,因为您只提供了汇总统计信息。为了说明这种方法,我将模拟一些数据,假设您喜欢苹果的概率实际上是“真实”概率。

library(dplyr)
library(ggplot2)
library(tidyr)


# Simulate some data ------------------------------------------------------

# Number of individuals
n.individuals <- 1e4

# Years of study
years <- 2013:2018

# Numbre of years
n.years <- length(years)

# Probability of liking apples 
pLikeApples = c(0.044, 0.041, 0.055, 0.063, 0.054, 0.060)

# Matrix of data
# Rows = individuals
# Columns = years
likesApples <- matrix(rep(NA_integer_, n.individuals*n.years), nrow = n.individuals)
for (j in 1:n.years) {
  for (i in 1:n.individuals) {
    likesApples[i,j] <- rbinom(1, 1, pLikeApples[j])
  }
}

# Name columns
colnames(likesApples) <- years

# Convert to data frame
appleData <- as_tibble(likesApples) %>% 
  mutate(ID = row_number()) %>% 
  gather(year, likesApples, -ID) %>% 
  mutate(year = as.integer(year))

如果我们对汇总统计数据执行简单的线性回归,那么我们会得到如下所示的结果

# Summary data ------------------------------------------------------------

summaryAppleData <- 
  appleData %>% 
  group_by(year) %>% 
  summarize(pLikeApples = mean(likesApples))

# Plot data ---------------------------------------------------------------

ggplot(summaryAppleData,
       aes(x = year, y = pLikeApples)) +
  geom_point() +
  geom_smooth(method = "lm") +
  labs(title = "Standard linear regression \nof summary data",
       y = "probability of liking apples") +
  ylim(0, 0.1)

汇总统计的线性回归

如果我们使用完整的数据并应用逻辑回归,那么我们会得到如下所示的结果

# Logistic regression -----------------------------------------------------

# Fit logistic regression model
myMod <- glm(data = appleData,
             formula = likesApples ~ year,
             family = "binomial")

# Summarize model
summary(myMod)

# Inverse link function
linkInv <- myMod$family$linkinv

# Predict response on linear scale
predLink <- predict.glm(myMod, newdata = summaryAppleData, type = "link", se.fit = TRUE)

# Backtransform predictions
pred <- 
  summaryAppleData %>% 
  mutate(pred = linkInv(predLink$fit),
         LL = linkInv(predLink$fit - 1.96*predLink$se.fit),
         UU = linkInv(predLink$fit + 1.96*predLink$se.fit))

# Plot logistic regression
ggplot() +
  geom_point(data = summaryAppleData, aes(x = year, y = pLikeApples)) +
  geom_line(data = pred, aes(x = year, y = pred)) +
  geom_ribbon(data = pred, aes(x = year, y = pred, ymin = LL, ymax = UU), alpha = 0.3) +
  labs(title = "Logistic regression",
       y = "probability of liking apples") +
  ylim(0, 0.1)

逻辑回归

最后,为了解决您的第一个问题,根据逻辑回归模型的总结,我们看到年份变量是显着的,具有 *** 的显着代码表明置信水平基本上为 100%。您需要对您的数据进行分析,而不是像我所做的那样对模拟数据进行分析。此外,正如@orcmor 所讨论的,您在解释置信度时应谨慎行事。然而,这表明随着时间的推移,喜欢苹果的概率显着增加。

你的第二个问题稍微复杂一些。您对响应 Y 在 X 值范围内发生了多大变化感兴趣。粗略估计可能是取 2013 年平均概率的 95% 置信区间的上限,取 2018 年置信区间的下限,以获得总变化的近似下限。从我模拟的数据来看,这大约增加了 1.4 个百分点。

如果您还没有做过假设检验概念,我建议您快速浏览一下以了解什么是信心。在假设检验中,您可以区分观察到的样本是数据生成过程的实现,并且容易受到与确切函数的随机偏差的影响。因此,您对系数的估计也可能由于随机误差而偏离。在这种情况下,置信度通常是指您的样本不太可能因随机误差而偏离。你基本上想说,给定这个样本,我有 X% 的机会没有通过随机错误观察到这个样本(和我的结论)。为了能够这么说,您必须对错误的分布做出假设,以便您可以计算估计的分布。

如果您的功能是:

appleLiking=β0+β1t+ϵ

估计的均值和方差,那么您可以回答这两个问题。β1

  • 对于您的第一个问题,考虑到您估计的方差这通常被称为的重要性。β^10β^1β^1

  • 对于您的第二个,您对估计的的接近程度感兴趣,因为您估计的方差。β^1Yβ^1

幸运的是,一旦你假设分布,估计是相对简单的统计过程。您可以使用标准正态分布通过常见 p 值计算置信水平。对于估计过程,由于您要求的是时间序列,因此您可以使用 ARIMA 估计来解释误差项中的自相关。如果您使用 R,以下将提供估计:

appleLiking = as.ts(c(0.044, 0.041, 0.055, 0.063, 0.054, 0.060))    
auto.arima(appleLiking, xreg=1:length(appleLiking))

注意显示的标准错误。这些值是您进行置信度计算所需的值。有关时间序列问题的更多详细信息,请参见此处的答案。

更多的数据驱动分析,即对模型形式的假设较少......检测水平偏移和无趋势的存在......这使用了 3 个参数,而不是在简单和假定的趋势模型中及时使用的两个参数.

在此处输入图像描述导致在 2016 年检测到脉搏

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

总之,建立和识别具有 6 个观察值的模型充其量是困难的。整个想法是形成一个更能代表数据的模型。

您问“有 X% 的信心认为喜欢苹果的人的比例在 2013 年至 2018 年期间有所增加。” .. 答案是肯定在此处输入图像描述的,有 99.49% 的信心。