首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >数据科学19 | 统计推断-t分布置信区间

数据科学19 | 统计推断-t分布置信区间

作者头像
王诗翔呀
发布于 2020-07-03 08:53:22
发布于 2020-07-03 08:53:22
3.9K00
代码可运行
举报
文章被收录于专栏:优雅R优雅R
运行总次数:0
代码可运行

1. t分布

当样本量足够大,总体标准差已知时,根据中心极限定理可以用标准正态分布估计总体均值;t分布适用于小样本估计呈正态分布的总体均值。

当随机变量X满足 时,服从自由度df为n-1的t分布。

注意,如果用?代替S,则X服从标准正态分布。

t分布的置信区间为 , 为标准误。

使用manipulate( )观察不同自由度的t分布与标准正态分布:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
k <- 1000
xvals <- seq(-5, 5, length = k) 
myplot <- function(df){
  d <- data.frame(y = c(dnorm(xvals), dt(xvals, df)), 
                  x = xvals,
                  dist = factor(rep(c("Normal", "T"), c(k,k)))) 
  g <- ggplot(d, aes(x = x, y = y))
  g <- g + geom_line(size = 2, aes(colour = dist))
  g 
}
manipulate(myplot(mu), mu = slider(1, 20, step = 1))

与标准正态分布相比,df为1时t分布的峰值更低,两端的“尾巴”更厚。通过左上角设置图标控制df,df变大,t分布的峰值变高,两端的“尾巴”变低,逐渐接近标准正态分布。

使用manipulate( )观察不同自由度的t分布与标准正态分布的分位数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pvals <- seq(.5, .99, by = .01) 
myplot2 <- function(df){
  d <- data.frame(n= qnorm(pvals),t=qt(pvals, df), p = pvals)
  g <- ggplot(d, aes(x= n, y = t))
  g <- g + geom_abline(size = 2, col = "lightblue") 
  g <- g + geom_line(size = 2, col = "black")
  g <- g + geom_vline(xintercept = qnorm(0.975))
  g <- g + geom_hline(yintercept = qt(0.975, df)) 
  g
}
manipulate(myplot2(df), df = slider(1, 20, step = 1))

两个分布对称,零点从第50百分位数开始。

标准正态分布的97.5百分位数约为1.96(蓝色参考线);自由度为2时,t分布的第97.5分位数大于4(黑色曲线)。自由度越大,t分位数越接近于正态分位数。t分位数(黑色曲线)总是在正态分位数(蓝色参考线)之上,意味着t分布的置信区间总是比正态分布的宽。

2. t分布置信区间

  • 当自由度很大时,t分布接近标准正态分布,置信区间收敛于标准正态分布的置信区间。
  • 偏态分布的数据不满足t分布置信区间的假设,置信区间的中心落在均值处没有意义,可以考虑使用对数处理数据,或使用其他统计量如中位数。
➢配对样本——配对t检验

例:sleep数据集,10名患者服用2种不同安眠药后睡眠时间增加的数据。

两组样本数据来自于同10名患者,两组样本均值不独立。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data(sleep) 
head(sleep)
  extra group ID
1   0.7     1  1
2  -1.6     1  2
3  -0.2     1  3
4  -1.2     1  4
5  -0.1     1  5
6   3.4     1  6
#extra为增加的睡眠时间,数据分为两组,10名患者ID记为1-10
ggplot(sleep, aes(x=group,y=extra,color=ID))+
  geom_point(color="salmon", size=4, alpha=.3)+
  geom_line(aes(group=ID))

计算两组差异的均值的置信区间:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
g1 <- sleep$extra[1 : 10]
g2 <- sleep$extra[11 : 20] 
difference <- g2 - g1 #计算同一患者对两种药物增加睡眠时间的差值
mn <- mean(difference) #计算差值的均值
s <- sd(difference) #计算样本标准差
n <- 10

#公式计算
mn + c(-1, 1) * qt(.975, n-1) * s / sqrt(n) 
[1] 0.7001 2.4599

#单样本t检验
t.test(difference) 

  One Sample t-test

data:  difference
t = 4.1, df = 9, p-value = 0.003
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
 0.7001 2.4599
sample estimates:
mean of x 
     1.58

#配对t检验
t.test(g2, g1, paired = TRUE) 

  Paired t-test

data:  g2 and g1
t = 4.1, df = 9, p-value = 0.003
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.7001 2.4599
sample estimates:
mean of the differences 
                   1.58 

#配对t检验
t.test(extra ~ I(relevel(group, 2)), paired = TRUE, data = sleep)

  Paired t-test

data:  extra by I(relevel(group, 2))
t = 4.1, df = 9, p-value = 0.003
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 0.7001 2.4599
sample estimates:
mean of the differences 
                   1.58

#组合输出得到的置信区间
rbind(
  mn + c(-1, 1) * qt(.975, n-1) * s / sqrt(n),
  t.test(difference)$conf,
  t.test(g2, g1, paired = TRUE)$conf,
  t.test(extra ~ I(relevel(group, 2)), paired = TRUE, data = sleep)$conf) 
       [,1] [,2]
[1,] 0.7001 2.46
[2,] 0.7001 2.46
[3,] 0.7001 2.46
[4,] 0.7001 2.46

以上方法得到的置信区间都为(0.70,2.46)。

➢独立样本,方差齐——成组t检验

对于分组独立且来自正态分布的样本,总体方差相等时,?y-?x的(1-?)×100%置信区间为 。

自由度为nx+ny-2,合并方差为 , 为合并标准差。

两组的方差相同,需要用两个样本的方差来估计总体方差,这正是合并方差的作用。

例:比较8名口服避孕药及21名空白对照患者的血压。

口服避孕药的患者的平均收缩压 =132.86mmHg,标准差 =15.34mmHg。

对照者的平均收缩压 =127.44mmHg,标准差 =18.23mmHg。

两组受试者之间相互独立且样本数不同时,不能使用配对t检验。

用合并标准差估计均值差异的置信区间:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sp<-sqrt((7*15.34^2+20*18.23^2)/(8+21-2)) 
132.86-127.44+c(-1,1)*qt(.975,27)*sp*(1/8+1/21)^.5
[1] -9.521 20.361

区间包括0,所以不能排除两组之间总体差异性为0的可能性。

例:sleep数据集的错误处理:假设数据集中两组样本不配对且方差齐

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
n1 <- length(g1); n2 <- length(g2)
sp <- sqrt( ((n1 - 1) * sd(g1)^2 + (n2-1) * sd(g2)^2) / (n1 + n2-2)) #计算合并标准差
md <- mean(g2) - mean(g1)
semd<-sp*sqrt(1/n1+1/n2) #计算均值之差的标准误
rbind(
  md+c(-1,1)*qt(.975,n1+n2-2)*semd,  #公式计算置信区间
  t.test(g2, g1, paired = FALSE, var.equal = TRUE)$conf, #成组t检验
  t.test(g2, g1, paired = TRUE)$conf #配对t检验
)
        [,1]  [,2]
[1,] -0.2039 3.364
[2,] -0.2039 3.364
[3,]  0.7001 2.460

如果按配对样本计算,置信区间不包括0,但如果忽视样本配对,置信区间会包括0。

例:ChickWeight数据集,包含4种不同饮食对小鸡生长的影响的数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(datasets)
data(ChickWeight)
head(ChickWeight)
  weight Time Chick Diet
1     42    0     1    1
2     51    2     1    1
3     59    4     1    1
4     64    6     1    1
5     76    8     1    1
6     93   10     1    1

summary(ChickWeight)
     weight         Time          Chick     Diet   
 Min.   : 35   Min.   : 0.0   13     : 12   1:220  
 1st Qu.: 63   1st Qu.: 4.0   9      : 12   2:120  
 Median :103   Median :10.0   20     : 12   3:120  
 Mean   :122   Mean   :10.7   10     : 12   4:118  
 3rd Qu.:164   3rd Qu.:16.0   17     : 12          
 Max.   :373   Max.   :21.0   19     : 12          
                              (Other):506 

str(ChickWeight)
Classes ‘nfnGroupedData’, ‘nfGroupedData’, ‘groupedData’ and 'data.frame':  578 obs. of  4 variables:
 $ weight: num  42 51 59 64 76 93 106 125 149 171 ...
 $ Time  : num  0 2 4 6 8 10 12 14 16 18 ...
 $ Chick : Ord.factor w/ 50 levels "18"<"16"<"15"<..: 15 15 15 15 15 15 15 15 15 15 ...
 $ Diet  : Factor w/ 4 levels "1","2","3","4": 1 1 1 1 1 1 1 1 1 1 ...
#weight为每只小鸡从出生开始在不同时间点测的体重
#Time为不同的监测时间
#Chick为每只小鸡的编号
#Diet为4种饮食的编号

重组数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(reshape2)
##define weight gain or loss
wideCW <- dcast(ChickWeight, Diet + Chick ~ Time, value.var = "weight") 
names(wideCW)[-(1 : 2)] <- paste("time", names(wideCW)[-(1 : 2)], sep = "") 
library(dplyr)
wideCW <- mutate(wideCW,
                 gain = time21 - time0)

head(wideCW)
  Diet Chick time0 time2 time4 time6 time8 time10 time12 time14 time16 time18 time20 time21 gain
1    1    18    39    35    NA    NA    NA     NA     NA     NA     NA     NA     NA     NA   NA
2    1    16    41    45    49    51    57     51     54     NA     NA     NA     NA     NA   NA
3    1    15    41    49    56    64    68     68     67     68     NA     NA     NA     NA   NA
4    1    13    41    48    53    60    65     67     71     70     71     81     91     96   55
5    1     9    42    51    59    68    85     96     90     92     93    100    100     98   56
6    1    20    41    47    54    58    65     73     77     89     98    107    115    117   76

画出原始数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
meanweight<-ChickWeight %>% 
  group_by(Time,Diet) %>% 
  summarise(weight = mean(weight)) #按Time统计weight平均值
meanweight
# A tibble: 48 x 3
# Groups:   Time [12]
    Time Diet  weight
   <dbl> <fct>  <dbl>
 1     0 1       41.4
 2     0 2       40.7
 3     0 3       40.8
 4     0 4       41  
 5     2 1       47.2
 6     2 2       49.4
 7     2 3       50.4
 8     2 4       51.8
 9     4 1       56.5
10     4 2       59.8
# … with 38 more rows

ggplot(ChickWeight, aes(x=Time, y=weight, color=Diet)) +
  geom_line(aes(group=Chick))+ #画出不同饮食分组下每只小鸡的体重生长曲线
  geom_line(data=meanweight,color="black")+ #画出不同饮食分组的体重生长均值曲线
  facet_grid(.~Diet)

第1种饮食的末端变异似乎比第4种饮食的末端变异大得多,但第1种饮食中的鸡比第4种饮食中的鸡数量要多,所以很难真正比较变化。观察每组均值,第1种饮食的平均体重增长似乎确实比第4种饮食的平均体重增长慢。

画出每种饮食的小鸡最终体重增长量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(wideCW,aes(x=Diet,y=gain,fill=Diet))+
  geom_violin(size=1,color="black")+
  labs(x="factor(Diet)",fill="factor(Diet)")

比较第1种饮食和第4种饮食的差异:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wideCW14 <- subset(wideCW, Diet %in% c(1, 4))
rbind(
  t.test(gain ~ Diet, paired = FALSE, var.equal = TRUE, data = wideCW14)$conf, 
  t.test(gain ~ Diet, paired = FALSE, var.equal = FALSE, data = wideCW14)$conf)
       [,1]   [,2]
[1,] -108.1 -14.81
[2,] -104.7 -18.30

两组样本相互独立且样本量不同,不能使用配对t检验,paired = FALSE。方差齐或不齐的情况下,置信区间小于0,表明第1种饮食比第4种饮食的体重增加更少。方差是否一致会影响区间。

➢独立样本,方差不齐——校正t检验

对于分组独立且来自正态分布的样本,若方差不齐性不严重时,可以用校正t检验,

?y-?x的95%置信区间可用 计算,其中tdf用自由度 计算。

实际上,方差不齐的独立样本的相关标准化统计量不服从t分布,当其自由度用这种方式计算下才近似t分布。

例:比较8名口服避孕药及21名空白对照患者的血压。

口服避孕药的患者的平均收缩压 =132.86mmHg,标准差 =15.34mmHg。

对照者的平均收缩压 =127.44mmHg,标准差 =18.23mmHg。

df=15.04,t15.04,0.975=2.13。

计算均值之差的置信区间:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
132.86 - 127.44 + c(-1, 1) * 2.13 * (15.34^2/8 + 18.23^2/21)^.5
[1] -8.906 19.746

R中可以使用t.test(..., var.equal = FALSE)计算。

编辑:李雪纯 冯文清

校审:张健 罗鹏

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 优雅R 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
数据科学20 | 假设检验和P值
假设检验用来判断样本与样本、样本与总体的差异是由抽样误差引起还是本质差别造成的统计推断方法。
王诗翔呀
2020/07/03
1.9K0
R语言系列第四期:①R语言单样本双样本差异性检验
之前详细介绍了利用R语言进行统计描述,详情点击:R语言系列第三期:③R语言表格及其图形展示、R语言系列第三期:①R语言单组汇总及图形展示、R语言系列第三期:②R语言多组汇总及图形展示
微点
2019/05/11
2.3K0
数据科学18 | 统计推断-渐近性
渐近性(asymptopia)是样本量接近于无穷大时统计行为的一个术语。渐近统计即大样本统计主要研究当样本量n→∞时统计方法的有关渐进性质。渐近性有助于简单的统计推断和估计,也是频率解释概率的基础。
王诗翔呀
2020/07/03
2.7K0
数据科学18 | 统计推断-渐近性
Python数据科学:正态分布与t检验
区间估计用到了中心极限定理,表现为如果抽样多次,每次抽样都有一个均值,产生的多个均值服从正态分布。
小F
2020/10/09
2.2K0
Python数据科学:正态分布与t检验
聊聊置信度与置信区间
今天这篇聊聊统计学里面的置信度和置信区间,好像没怎写过统计学的东西,这篇试着写一写。
张俊红
2019/05/05
2.1K0
【Python量化统计】——『置信区间』全角度解析(附源码)
一、置信区间 置信区间是指由样本统计量所构造的总体参数的估计区间。在统计学中,一个概率样本的置信区间(Confidence interval)是对这个样本的某个总体参数的区间估计。置信区间展现的是这个参数的真实值有一定概率落在测量结果的周围的程度。置信区间给出的是被测量参数的测量值的可信程度。 样本均值和总体均值是不同的。一般来说,我们想知道一个总体平均,但我们只能估算出一个样本的平均值。那么我们就希望使用样本均值来估计总体均值。我们使用置信区间这一指标,试图确定我们的样本均值是如何准确地估计总体均值的。
量化投资与机器学习微信公众号
2018/01/29
3.5K0
【Python量化统计】——『置信区间』全角度解析(附源码)
如何理解95%置信区间_95的置信区间和90的置信区间
项目github地址:bitcarmanlee easy-algorithm-interview-and-practice 经常有同学私信或留言询问相关问题,V号bitcarmanlee。github上star的同学,在我能力与时间允许范围内,尽可能帮大家解答相关问题,一起进步。
全栈程序员站长
2022/11/09
4.9K0
如何理解95%置信区间_95的置信区间和90的置信区间
【数据分析 R语言实战】学习笔记 第七章 假设检验及R实现(上)
对总体参数的具体数值所作的陈述,称为假设;再利用样本信息判断假设足否成立,这整个过程称为假设检验。
Ai学习的老章
2019/04/10
2.3K0
【数据分析 R语言实战】学习笔记 第七章 假设检验及R实现(上)
如何用python来做假设检验, 求假设检验、置信区间、效应量
我们再在进行数据分析时,简单的数据分析不能深刻的反映一组数据得总体情况,倘若我们用统计学角度来分析数据则会解决一些平常解决不了得问题.
润森
2022/08/18
2.2K0
如何用python来做假设检验, 求假设检验、置信区间、效应量
【独家】考察数据科学家和分析师的41个统计学问题
作者:Dishashree Gupta 翻译:闵黎 卢苗苗 校对:丁楠雅 本文长度为6500字,建议阅读20分钟 本文是Analytics Vidhya所举办的在线统计学测试的原题,有志于成为数据科学家或者数据分析师的同仁可以以这41个问题测试自己的统计学水平。 介绍 统计学是数据科学和任何数据分析的基础。良好的统计学知识可以帮助数据分析师做出正确的商业决策。一方面,描述性统计帮助我们通过数据的集中趋势和方差了解数据及其属性。另一方面,推断性统计帮助我们从给定的数据样本中推断总体的属性。了解描述性和
数据派THU
2018/01/29
1.9K0
【独家】考察数据科学家和分析师的41个统计学问题
概率论--置信区间和置信度
置信区间的计算公式有多种不同的变体,每种变体适用于不同的情况。以下是几种常见的置信区间计算公式及其适用情况:
用户11315985
2024/10/16
1.8K0
概率论--置信区间和置信度
Python统计分析
描述性统计偏度和峰度累计值假设检验和区间估计示例1假设检验置信区间示例2假设检验置信区间
用户3577892
2020/07/14
9850
Python统计分析
Python求解正态分布置信区间
正态分布(Normal Distribution)又叫高斯分布,是一种非常重要的概率分布。其概率密度函数的数学表达如下:
卡尔曼和玻尔兹曼谁曼
2019/01/25
4.3K0
Python求解正态分布置信区间
如何制作推论统计分析报告
“超级引擎”是一家专门生产汽车引擎的公司,根据政府发布的新排放要求,引擎排放平均值要低于20ppm, (ppm是英文百万分之一的缩写,这里我们只要理解为是按照环保要求汽车尾气中碳氢化合物要低于20ppm)。公司制造出10台引擎供测试使用,每一台的排放水平如下:
开心鸭
2020/10/26
1.7K0
如何制作推论统计分析报告
如何通俗地解释「置信区间」和「置信水平」?
历史上最早的科学家曾经不承认实验可以有误差,认为所有的测量都必须是精确的,把任何误差都归于错误。后来人们才慢慢意识到误差永远存在,而且不可避免。即使实验条件再精确也无法完全避免随机干扰的影响,所以做科学实验往往要测量多次,用取平均值之类的统计手段去得出结果。
猴子数据分析
2024/03/25
5K0
如何通俗地解释「置信区间」和「置信水平」?
置信度和置信区间
我们经常需要获取某个分布的参数,当样本空间特别大或者不方便统计所有样本时,常常会用部分样本来估计系统参数,这个方法称作点估计。常用的点估计方法:
为为为什么
2023/10/18
6260
「Workshop」第十三期:统计检验与多重矫正
假设检验(hypothesis testing),又称统计假设检验,是用来判断样本与样本、样本与总体的差异是由抽样误差引起还是本质差别造成的统计推断方法。
王诗翔呀
2020/08/20
2.7K0
「Workshop」第十三期:统计检验与多重矫正
一入统计深似海-t检验
翻开统计学的书,让我有种当年看《红楼梦》的错觉;嗯,名著(高级),要看下去;可是人(概念)怎么这么多,我还是慢慢来!!! 没有自己的理解串起来,会比较枯燥,之后再持续更新。 假设检验 三步走: 1.提
生信技能树
2019/05/24
7550
【数据分析 R语言实战】学习笔记 第六章 参数估计与R实现(上)
BBsolve()@BB:使用Barzilai-Borwein步长求解非线性方程组
Ai学习的老章
2019/04/10
3K0
【数据分析 R语言实战】学习笔记 第六章 参数估计与R实现(上)
统计简单学_估计
区间估计,首先找到所求值的点估计,然后根据数据获得所求值得抽样分布,确定信赖水平(可信度),最后得到相应信赖水平下的信赖区间。
用户1147754
2019/05/26
9980
统计简单学_估计
推荐阅读
相关推荐
数据科学20 | 假设检验和P值
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档