在我的模拟研究中,我需要为多变量数据提出协方差矩阵。 我的数据:
dataset=data.frame(observation=rep(1:8,2),plot=rep(1:4,each=2),time=rep(1:2,8),treatment=rep(c("A","B","A","B"),each=4),OutputVariable=rep(c("P","Q"),each=8))
此数据集是多变量的,对于每个观察(1:8),都有多个结果。在这种情况下,我们同时观察OutputVariable P和OutputVariable Q的值。请注意,实际输出不在此数据集中,因为我将在稍后阶段生成它们。
所需的协方差矩阵为16x16。其中CovarMat[2,9]
表示数据集中第二行(变量P的观察2)和第9行(变量Q的观察1)之间的协方差。
例如,CovarMat [2,9]的值基于以下规则:
CovarMat[2,9]=0
dataset$plot[2]==dataset$plot[9]
则CovarMat[2,9]=CovarMat[2,9]+1.5
dataset$time[2]==dataset$time[9]
则CovarMat[2,9]=CovarMat[2,9]+1.5
(dataset$plot[2]==dataset$plot[9])&(dataset$time[2]==dataset$time[9])
则CovarMat[2,9]=CovarMat[2,9]+3
abs(dataset$time[2]-dataset$time[9])=1
则CovarMat[2,9]=CovarMat[2,9]+2
使用For循环很容易(这就是我现在所做的)。但我目前的数据集是13,200行。因此我的CovarMat由174,240,000个细胞组成。因此,我迫切需要一种更有效的方式。