人口之间的距离

时间:2014-09-04 18:41:34

标签: r

我想计算12个种群之间的欧几里德距离,每个种群中有20个样本,每个样本测量100个基因(这些是微阵列数据;这里的数字只是示例)。

我找到的等式是:

distance = sqrt{[sum(Average of xi -average of yi)^2] /n }, i=1 to n;

其中xiyi是基因ipq个样本(x1, x2,…,xp), (y1, y2,…,yq),{{1}的两个群体中的表达式是基因的数量。

部分数据粘贴在

下面
n

如何使用此数据结构计算R中的这些距离?

1 个答案:

答案 0 :(得分:0)

欧几里德距离是每个维度上的平方差之和的sqrt。 (不是平均值差异的平方。)像:

 apply( combn(2:length(dat),2 ) , 2, function(x){
             sqrt( sum( (dat[[ x[1] ]]- dat[[ x[2] ]])^2 ) ) }
       )
#------------------
 [1] 1.5913270 1.4442952 0.6192787 1.4398434 1.4693528 1.2470760
 [7] 0.9585670 1.7037315 1.7930213 2.5314568 2.6202225 1.5123061
[13] 1.9353429 1.2131522 1.4964447 1.8511313 0.3261149 1.2958417
[19] 1.2359515 1.2546398 1.0463696 0.7498210 0.5431169 1.6041417
[25] 0.7094458 1.9002458 0.7020604 1.2927393

如果您想知道正在比较哪些列:

 cbind( t(combn(2:length(dat),2 )), 
        apply( combn(2:length(dat),2 ) , 2, function(x){
          sqrt( sum( (dat[[ x[1] ]]- dat[[ x[2] ]])^2 ) ) }
        ) 
    )