相关系数z检验(从R语言到matlab转换)

原来做配对或是双样本t检验的时候,都是用的matlab里面自带的ttest、ttest2来解决,但是遇到一些文献里面,有z检验是在R语言环境下编写的,但是如何在matlab 中用z检验呢?

一、相关系数Fisher z-transform

Fisher z-transform是对数据近似的变异稳定化处理,z变换后近似服从均值为标准差为的正态分布。(内容参考:http://en.wikipedia.org/wiki/Fisher_z-transformation)

z变换有好几种:

如果是相关系数,用fisher z变换。

如果是t值,用spm_t2z(可以搜寻spm8软件包)
如果是其他值比如量表得分,用减均值除方差方式近似得到z值
(内容感谢Zang YF的回答:http://restfmri.net/forum/node/1751)

这边我只写Fisher z变换公式,针对相关系数作阐述,具体可以查阅wiki:
Z = 0.5* ln( (1+r)/(1-r) ) 


二、某些研究中,样本方差可能是知道的,在这种情况下检验统计量 t 可以由 z 代替,临界值也由相应的标准正态分布值代替,所以:


对于R语言环境中:

diff.corr <- function( r1, n1, r2, n2 ){ 

    Z1 <- 0.5 * log( (1+r1)/(1-r1) ) 
    Z2 <- 0.5 * log( (1+r2)/(1-r2) ) 

    diff   <- Z1 - Z2 
    SEdiff <- sqrt( 1/(n1 - 3) + 1/(n2 - 3) ) 
    diff.Z  <- diff/SEdiff 

    p <- 2*pnorm( abs(diff.Z), lower=F) 
    cat( "Two-tailed p-value", p , "\n" ) 
  } 

  diff.corr( r1=0.5, n1=100, r2=0.40, n2=80 ) 
  ## Two-tailed p-value 0.4103526 

  diff.corr( r1=0.1, n1=100, r2=-0.1, n2=80 ) 
  ## Two-tailed p-value 0.1885966 

(内容参考 http://r.789695.n4.nabble.com/Significance-of-the-difference-between-two-correlation-coefficients-td3063765.html)

其中r1 r2是两个样本的均值,n1 n2是样本数。

而如是在matlab中如何z检验呢?

function [zvalue,pvalue] = zr(r1,n1,r2,n2)

z1 = 0.5*log((1+r1)/(1-r1));
z2 = 0.5*log((1+r2)/(1-r2));
ddiff = z1-z2;
SEddiff = sqrt(1/(n1-3)+1/(n2-3));
zvalue = ddiff/SEddiff;
pvalue = 2 *(1- normcdf(abs(zvalue)));
end

输出的duffz ff分别是z值和概率,normcdf是累计正态分布函数,若是要单尾的话,

pvalue = 2*(1- normcdf(abs(zvalue),0,1));
normcdf不用乘以2,若是2013b版本的matlab可以用upper来代替1减

http://vassarstats.net/rdiff.html 这个网址是z变换网址,数据量少的话或不怕麻烦可以进入这个网址。



你可能感兴趣的:(统计)