我想计算12个种群之间的欧几里德距离,每个种群中有20个样本,每个样本测量100个基因(这些是微阵列数据;这里的数字只是示例)。
我找到的等式是:
distance = sqrt{[sum(Average of xi -average of yi)^2] /n }, i=1 to n;
其中xi
和yi
是基因i
在p
和q
个样本(x1, x2,…,xp), (y1, y2,…,yq)
,{{1}的两个群体中的表达式是基因的数量。
部分数据粘贴在
下面n
如何使用此数据结构计算R中的这些距离?
答案 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 ) ) }
)
)