我有一个数据集,我想在其中应用几个测试,例如 KS 两个样本。所以我正在尝试找到一种可以将 KS 两个样本测试应用于所有样本的算法。基本思想是:
假设我有一个包含这些观察结果的数据集:
1 2 3 4
Study1 9 1 2 6
Study2 5 6 7 8
Study3 4 3 2 1
Study4 8 7 6 5
Study5 1 3 5 7
Study6 2 4 6 8
Study7 1 3 6 9
Study8 2 4 7 1
Study9 2 5 8 4
Study10 3 6 8 5
我可以通过以下方式将KS测试应用于每项研究:
ks.test(as.numeric(as.vector(df[1,])),as.numeric(as.vector(df[1,])))
ks.test(as.numeric(as.vector(df[1,])),as.numeric(as.vector(df[2,])))
ks.test(as.numeric(as.vector(df[1,])),as.numeric(as.vector(df[3,])))
...
ks.test(as.numeric(as.vector(df[1,])),as.numeric(as.vector(df[10,])))
ks.test(as.numeric(as.vector(df[2,])),as.numeric(as.vector(df[1,])))
...
ks.test(as.numeric(as.vector(df[10,])),as.numeric(as.vector(df[10,])))
这将产生 10x10 的 p 值,我的目标是将其用作距离的度量。
所以我正在寻找一种算法,它可以对 n x n 个样本运行 KS 测试,然后在 n x n 矩阵中输出 p 值。
您正在寻找outer
:
outer(1:10, 1:10, Vectorize(function(i,j) {ks.test(as.numeric(as.vector(df[i,])),as.numeric(as.vector(df[j,])))$p.value}))