您描述的数据可能被视为汇总统计数据。某人是否喜欢苹果可以被认为是二元结果(1 = 喜欢苹果,0 = 不喜欢苹果)。因此,如果您在 6 年内对 10,000 人进行调查,那么您将有 60,000 条回答来衡量每个人是否喜欢苹果的二元结果。
有人喜欢苹果的概率实际上是二项式结果的平均值。这很重要,主要有两个原因:
样本量远大于您提供的汇总统计数据,因此您对结果的信心应该比汇总统计数据的线性回归所表明的要高得多
数据的二元性质应引导您考虑逻辑回归。
我没有完整的数据,因为您只提供了汇总统计信息。为了说明这种方法,我将模拟一些数据,假设您喜欢苹果的概率实际上是“真实”概率。
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 个百分点。