让我们荡起双桨,重新认识一下p值

在正文之前先分享一点生活故事:

上周天傍晚,我闪着腰了,躺了一晚上不见好,发朋友圈寻医问药了:



因为做的是生信分享,我朋友圈里医学生和医生非常多,我想看他们怎么说。
我收到了几十条回复,分享一下给大家,就当拿我的教训给大家涨涨经验吧,有备无患...

1.关于为什么痛

根据我的症状描述,多位医生/医学生指出这是腰肌劳损,多半是因为久坐姿势不对引起的,如果严重一点就会发展成为小关节紊乱,再不注意,过几年会发展成腰椎间盘突出(啊吓死了。)

2.关于去不去医院

大多数医生/医学生说得去医院,也有几位说不用去医院,在家躺着休息,感觉有麻木、牵拉感再去医院。

3.关于挂什么科

先要去骨科或者脊柱外科,要拍个片子确认一下没有伤到骨头,也有人说做MR(核磁共振成像);然后去针灸/推拿/理疗/疼痛/康复科,针灸和推拿都是有效的,有针灸科的医学生说,这个一针见效。不能针灸的话,那就是中医正骨推拿,也能搞定,不过大家都说推拿不是谁都可以,要有经验的老中医才行。

关于拍片子,有朋友指出我这个是弯腰岔气,不是摔的或者碰的,没有伤到骨头,不拍也行,拍了放心。

4.病例本例现身说法

知道了推拿可以治这回事,我查了一下家长,附近有个中医推拿馆,我就打了电话过去,他们详细询问了我的症状,问是不是久坐,以前有没有出现过轻的腰部不适症状,我说是的。她说可以过去,推拿能搞定。最后没有拍片子,一个小时的推拿基本缓解了疼痛,本来无法弯腰,坐下就痛,按完可以弯腰了,还有一些不适的感觉,但是明显缓解。

发现了没,我的朋友圈可太优秀了吧!剧透一波,双十一我要在公众号为我朋友圈里的单身男女们发布一下征友信息,敬请关注哈哈


以下是正文

1.p值是不是概率?

P value is the probility that rendom chance generated the data, or something else that is equal or rarer.

也就是说,p值由三部分概率组成:目标事件概率+(与目标事件概率相同的事件)的概率+(比目标事件概率更小的事件)的概率。

顺便补充两个R语言的函数,choose和combn。

choose(5,1)
## [1] 5
choose(5,2)
## [1] 10
choose(5,3)
## [1] 10
choose(5,4)
## [1] 5
choose(5,5)
## [1] 1

choose(5,3)表示从五个数中抽取三个,有多少种可能,返回具体数值。

combn(1:5,1)
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    2    3    4    5
combn(1:5,2)
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,]    1    1    1    1    2    2    2    3    3     4
## [2,]    2    3    4    5    3    4    5    4    5     5
combn(1:5,3)
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,]    1    1    1    1    1    1    2    2    2     3
## [2,]    2    2    2    3    3    4    3    3    4     4
## [3,]    3    4    5    4    5    5    4    5    5     5
combn(1:5,4)
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    1    1    1    2
## [2,]    2    2    2    3    3
## [3,]    3    3    4    4    4
## [4,]    4    5    5    5    5
combn(1:5,5)
##      [,1]
## [1,]    1
## [2,]    2
## [3,]    3
## [4,]    4
## [5,]    5

combn(1:5,3)表示从五个数中抽取3个,列出所有可能(矩阵形式)

2.计算实例一,扔两个硬币

结果为HH的概率和p值

(H:head,T:tail)

随机抛两次硬币,HH、TT的概率都是1/4,HT的概率是1/2。

根据三个组成部分,可以计算出HH的p值:1/4 + 1/4 + 0 = 1/2 = 0.5

结果为HT的概率和p值

顺序通常没什么用,在这里,不考虑顺序,HT和TH是一样的。概率为1/2。

p值是 1/2 + 1/4 + 1/4 = 1

3.计算实例二,扔五个硬币

五个硬币,总共有32种可能:

除了五正、五反两种情况,其他的30种是:

library(stringr)
lapply(1:4, function(n){
  k = combn(1:5,n)
  sapply(1:ncol(k), function(x){
    y = rep("H",5)
    y[k[,x]] = "T"
    return(paste(y,collapse = ""))
  })
})
## [[1]]
## [1] "THHHH" "HTHHH" "HHTHH" "HHHTH" "HHHHT"
## 
## [[2]]
##  [1] "TTHHH" "THTHH" "THHTH" "THHHT" "HTTHH" "HTHTH" "HTHHT" "HHTTH" "HHTHT"
## [10] "HHHTT"
## 
## [[3]]
##  [1] "TTTHH" "TTHTH" "TTHHT" "THTTH" "THTHT" "THHTT" "HTTTH" "HTTHT" "HTHTT"
## [10] "HHTTT"
## 
## [[4]]
## [1] "TTTTH" "TTTHT" "TTHTT" "THTTT" "HTTTT"

可以看到上面生成的结果是一个列表,分了四组,分别代表有1、2、3、4个T的所有情况。

五个正面朝上的概率和p值

HHHHH的概率:(1/2)^5 = 1/32,TTTTT与之概率相等,不存在比1/32概率更小的事件。

HHHHH的p值:1/32 + 1/32 + 0 = 0.0625

虽然五个H的几率很小,但是p值>0.05,不认为是非常罕见的事件。

四正一反的概率和p值

四正一反的概率:choose(5,1)/(2^5) = 5/32

与目标事件相等的事件是四反一正,比目标事件概率更小的是五正和五反,所以p值是:

5/32 + 5/32 + 1/32 + 1/32 = 0.375

4.连续型的数据如何计算p值

例如身高,无法穷举所有的可能性。

密度图曲线下的面积代表横坐标对应范围事件发生的概率

生成示例图,身高的正态分布曲线,均值约为155.5

library(ggplot2)
x = seq(130,180,0.1)
df = data.frame(x = x,
                 y = dnorm(x,mean = 155.5,sd = 7),
                 gro = ifelse(x< 142,"A",ifelse(x >= 169,"C","B")))
ggplot(df, aes(x = x,y = y)) +
  geom_line() + theme_bw()
image.png

R语言如何计算曲线下的面积?我找到了一个积分函数,奇怪的知识增加了

连续型数据的概率

小于142cm:

integrate(function(x){dnorm(x=x,mean = 155.5,sd = 7)}, -Inf, 142)
## 0.02689204 with absolute error < 8.3e-06

大于169cm:

integrate(function(x){dnorm(x=x,mean = 155.5,sd = 7)}, 169, Inf)
## 0.02689204 with absolute error < 8.3e-06

介于142~169cm之间

integrate(function(x){dnorm(x=x,mean = 155.5,sd = 7)} , 142 , 169)
## 0.9462159 with absolute error < 6.7e-12

R语言是个好玩具,还可以画出相应的图(面积图)

ggplot(df, aes(x = x)) +
  geom_line(aes(y = y)) +
  geom_area(data = df[df$gro == "A",],aes(y = y), fill = 'blue',color = NA,alpha = 0.5)+
  geom_area(data = df[df$gro == "B",],aes(y = y), fill = 'red',color = NA,alpha = 0.5)+
  geom_area(data = df[df$gro == "C",],aes(y = y), fill = 'blue',color = NA,alpha = 0.5)+
  theme_bw()
image.png

重申一下,面积就是概率啊。

连续型数据的p值

再来看p值,身高小于142的p值如何计算?

身高>169和<142概率相等,没有比<142更加小概率的事件。所以p值为0.027*2 = 0.054

身高为142~169之间的p值:

0.946 + 0.027*2 = 1

0.946 是目标事件的概率,两个0.027是(比目标事件概率更小的事件)的概率。

区分p值和概率的极端例子

身高介于155~156之间的概率是:

integrate(function(x){dnorm(x=x,mean = 155.5,sd = 7)} , 155 , 156)
## 0.05694333 with absolute error < 6.3e-16

面积图:

df2 = data.frame(x = x,
                 y = dnorm(x,mean = 155.5,sd = 7),
                 gro = ifelse(x< 155,"A",ifelse(x >= 156,"C","B")))
ggplot(df2, aes(x = x)) +
  geom_line(aes(y = y)) +
  geom_area(data = df2[df2$gro == "B",],aes(y = y), fill = 'red',color = NA,alpha = 0.5)+
  theme_bw()
image.png

概率只为0.057,但p值呢?

目标事件概率是0.057,比目标事件概率更小的事件概率?因为155~156 处在正态分布的中位数附近,所以他的概率是最大的,身高落在所有的其他范围内的概率都比155~156要低,所以p值等于0.057+(1-0.057)=1

你可能感兴趣的:(让我们荡起双桨,重新认识一下p值)