用非均匀时间间隔计算MSD

时间:2012-06-05 07:12:02

标签: r data-analysis

我有一个矩阵,有2列x和y坐标。我想计算均方位移 - 即在给定时间内从起点移动到另一个点的平方距离,在许多不同的时间点取平均值 - 假设所有时间间隔相等。

所以工作公式是:

MSD=average(r(t)-r(0))^2 where r(t) is position at time t and r(0) is position at time 0.

所以我用来计算的代码是:

#Create a vector to save the square of the distance between successive
#locations
distsq<- numeric(length=nrow(mat))

#Calculate and assign these values
for (i in 2:nrow(mat))
{
distsq[i]<-((mat[i,1]-mat[i-1,1])^2)+((mat[i,2]-mat[i-1,2])^2)
}

#Calculate the mean sq distance for this value of n
MSD[k]<- mean(distsq) 

此处mat是x和y值的矩阵。

因此,当两个连续点之间的时间保持不变时,此公式有效。但是假设每2个坐标之间的时间不同,那么我该如何合并该组件来计算MSD?

2 个答案:

答案 0 :(得分:1)

这应该是相当有效的(尽管Roland在他对循环效率低下的一般主张中只是部分正确。)

A <- matrix(1:20, ncol=2)
mean( (A[,1] - A[1,1])^2 + (A[,2] - A[1,2])^2 )
[1] 57

答案 1 :(得分:0)

首先,R中的循环非常慢。因此,出于性能原因,我会避免使用它并使用diff()

但是,您的实际问题是数学问题,如果没有更多背景知识,很难回答。你可以使用某种加权函数:a ^(abs(deltat-b)),其中deltat是两点之间的时差。