r中如何求or值的置信区间

Python032

r中如何求or值的置信区间,第1张

用R语言求置信区间是很方便的,而且很灵活,至少我觉得比spss好多了。

如果你要求的只是95%的置信度的话,那么用一个很简单的命令就可以实现了

首先,输入da=c(你的数据,用英文逗号分割),然后t.test(da),运行就能得到结果了。

我的数据是newbomb <- c(28,26,33,24,34,-44,27,16,40,-2,29,22,24,21,25,30,23,29,31,19)

t.test(newbomb)得到的结果如下

如果要求任意置信度下的置信区间的话,就需要自己编一个函数了。

当然,有两点要记住的,置信区间的计算在知道方差和不知道方差的情况下,计算公式是不一样的。

下面做一个两种情况下都可以用的函数。

confint<-function(x,sigma=-1,alpha=0.05)

{

n<-length(x)

xb<-mean(x)

if(sigma>=0)

{

tmp<-sigma/sqrt(n)*qnorm(1-alpha/2)df<-n

}

else{

tmp<-sd(x)/sqrt(n)*qt(1-alpha/2,n-1)df<- n-1

}

data.frame(mean=xb,df=df,a=xb-tmp,b=xb+tmp)

}

这个函数的使用:

如果不知道方差,则confint(x,alpha) 知道方差,则confint(x,sigma,alpha)

这样就能计算出结果了。

predict () 里面interval="confidence"。

https://cran.r-project.org/web/packages/JM/JM.pdf

标准正态分布下mean=0,sd=1

95%置信区间为[mean-1.96*sd,mean+1.96*sd]

即左侧概率和为97.5%的数据减去左侧概率和为2.5%的数据,期间的数据概率即为95%的置信区间。那为什么是1.96倍呢,先看两个函数

dnorm 中的 d 表示 density , norm 表示正态分布,这个函数是正态分布的 概率密度(probability density)函数 。

给定x,μ和σ后, dnorm() 这个函数返回的就是会返回上面的这个公式的值,如果是标准正态分布,dnorm(n,mean=0,sd=1)输出就是当取n时的概率值,就是正态分布图当x=n时y的值。

pnorm函数中的p表示Probability,它的功能是,在正态分布的PDF曲线上,返回从负无穷到q的积分,其中这个q指的是一个Z-score,x=(mean+Z-score*sd)时的Z-score。现在我们大概就可以猜测出pnorm(0)的值是0.5,因为在标准正态分布曲线上,当Z-score等于0时,这个点正好在标准正态分布曲线的正中间,那么从负无穷到0之间的曲线面积就是整个标准正态分布曲线下面积的一半,pnorm(n,mean=0,sd=1)输出从负无穷到mean+sd*n的概率总和

用的最多的是3倍sd,相当于在正态分布落在3倍sd区间的概率为99.73002%,落在1.96倍sd区间的概率为95.00042%

那怎么求标准正态分布下0.975%,0.025%对应的Z-score呢,利用qnorm函数,非标准正态下不能这么求,因为qnorm函数输入的是分位值。或者查询正态分布表。

rnorm()函数的功能用于生成一组符合正态分布的随机数,在学习各种统计学方法时,rnorm这个函数应该是最常用的,它的参数有n,mean,sd,表示随机生成n个正态分布均值为mean标准差为sd时的一组数据,如下所示:

当出现如图所示的分布,近似正态分布,但是左右胖瘦不太一致时,这是现实中普遍存在的分布情况,如高通量测序过程中的碱基GC分布,这种情况求95%区间的方法

-先求取左侧部分的sd,但是要补足右侧对称的数据

-同样求右侧部分的sd,同时补足左侧对称的数据

-用最高密度值时max_gc值加减1.96倍左右侧的sd

做出效果如图