在正文之前先分享一点生活故事:
上周天傍晚,我闪着腰了,躺了一晚上不见好,发朋友圈寻医问药了:
因为做的是生信分享,我朋友圈里医学生和医生非常多,我想看他们怎么说。
我收到了几十条回复,分享一下给大家,就当拿我的教训给大家涨涨经验吧,有备无患...
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()
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()
重申一下,面积就是概率啊。
连续型数据的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()
概率只为0.057,但p值呢?
目标事件概率是0.057,比目标事件概率更小的事件概率?因为155~156 处在正态分布的中位数附近,所以他的概率是最大的,身高落在所有的其他范围内的概率都比155~156要低,所以p值等于0.057+(1-0.057)=1