一个函数带你领略数据的置信区间
前沿介绍
当已经获得了一组个数有限的数据时,整体数据集的分布应如何评估呢?如上图所示,整体数据的分布范围在[mean-σ,mean+σ]的可能性在68%;分布范围在[mean-2σ,mean+2σ]的可能性在95%;而整体数据的分布范围在[mean-3σ,mean+3σ]的可能性是99.7%。
计算置信区间的条件和对应公式
计算数据的置信区间
mean_ci <- function(x,sigma = NULL, conf = 0.95) {
if(is.null(sigma)) {
se = sd(x)/sqrt(length(x))
alpha = 1- conf
x_mean = mean(x)
lower = x_mean - se*qt(1-alpha/2,(length(x)-1))
upper = x_mean + se*qt(1-alpha/2,(length(x)-1))
} else {
se = sigma/sqrt(length(x))
alpha = 1- conf
x_mean = mean(x)
lower = x_mean - se*qnorm(1-alpha/2)
upper = x_mean + se*qnorm(1-alpha/2)
}
data.frame(x_mean,lower,upper)
}
# x为抽取一定数量的样本
#sigma(σ)为标准差,默认为未知
#conf为置信区间,默认为95%;可以设置为97%,也可以为99.7%
如何解读这个自己编写的小函数:
主要用到了IF{ } else{ }函数;首先根据sigma判断是否给出了标准差(标准差是否已知),若未知成立(TRUE),则运行if内的代码;否者运行else内的代码。“/” 表述除以;sqrt()代表对括号内的数据开方;length();计算数据的个数也就是n;“ - ” 表示减去;mean(); 求均值。qt()和qnorm();分别对应σ未知和已知时的“查表表格”。
使用数据“mtcars”里的变量试验函数运行情况:
data("mtcars")
x <- mtcars$mpg
x
# 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 #16.4 17.3 15.2 10.4 10.4 14.7
#32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 #19.7 15.0 21.4
mean_ci(x,conf = 0.95)
# x_mean lower upper
# 20.09062 17.91768 22.26357
#第一个是均值,第二个和第三个分别是95%置信区间的下限和上限
mean_ci(x,conf = 0.99)
#x_mean lower upper
#20.09062 17.16706 23.01419
#若sigma已知为2
mean_ci(x,sigma = 2,conf = 0.95)
# x_mean lower upper
# 20.09062 19.39767 20.78358
模型的置信区间
前面三节我们讲述了数据(单变量)的置信区间的计算方法和函数,那么模型的置信区间应该如何计算呢?模型指包含一个或多个自变量和一个因变量。如 y = ax2 +bx +c
这里就需要用到R里自带的基础函数predict了。
我们依然以mtcars数据为例。
假设已知disp与mpg满足一元二次函数,disp为因变量,mpg为自变量。
在R里两者构成的模型应该为:
disp ~ I(mpg^2) + mpg
fit <- lm(disp ~ I(mpg^2) + mpg, data = mtcars)
pre <- data.frame(predict(fit, mtcars, interval = "confidence", level = 0.95))
pre
#以95%为例
变量fit为根据模型预测得到的所有disp的值(与检测到的disp不一定完全一致);lwr为95%置信区间的下限,upr为95%置信区间的上限。
绘图如下:
library(tidyverse)
pre$mpg <- mtcars$mpg
pre$disp <- mtcars$disp
ggplot(data = pre)+
geom_point(aes(x=mpg, y = disp))+
geom_line(aes(x=mpg, y = fit)) +
geom_line(aes(x=mpg, y = lwr)) +
geom_line(aes(x=mpg, y = upr))