我想从一个融化的矩阵中产生一个成对的错误,看起来像这样:
pw.data = data.frame(true_tree = rep(c("maple","oak","pine"),3),
guess_tree = c(rep("maple",3),rep("oak",3),rep("pine",3)),
value = c(12,0,1,1,15,0,2,1,14))
true_tree guess_tree value
maple maple 12
oak maple 0
pine maple 1
maple oak 1
oak oak 15
pine oak 0
maple pine 2
oak pine 1
pine pine 14
所以我想估计真实树种和猜测树种之间的成对误差。对于此估计,公式应为“成对错误分配/所选两个物种的所有估计数。
为了给出更好的解释:枫木和橡木的错误猜测(枫木-橡木和橡木-枫木比较)= 1 + 0 / 所有猜测数 = 12 + 1 + 2(true_tree 的所有计数 == "枫木)+ 0 + 15 + 1(true_tree == "oak 的所有计数)。所以估计乘积是1/31。
当我检查一个特定的情况时,让我们再说一遍枫木和橡木,我可以手动估计它:
sum(pw.data[((pw.data[,1] == "maple" & pw.data[,2] == "oak") |
(pw.data[,1] == "oak" & pw.data[,2] == "maple")) &
(pw.data[,1] != pw.data[,2]),3]) /
(sum(pw.data[pw.data[,1] == "maple",3]) + sum(pw.data[pw.data[,1] == "oak",3]))
但是,我想对更大的数据进行估计,因此,我想创建一个 for 循环/函数来进行估计并将结果存储在数据框中,例如:
Pw_tree value
Maple-oak 0.0123
....
我试图在下面的 for 循环中使用该逻辑,但它根本不起作用。
for (i in pw.data[,1]) {
for (j in pw.data[,2]) {
x = sum( pw.data[((pw.data[,1] == i & pw.data[,2] == j ) |
(pw.data[,1] == j & pw.data[,2] == i)) &
(pw.data[,1] != pw.data[,2]),3])
y = (sum(pw.data[pw.data[,1] == i,3]) + sum(pw.data[pw.data[,1] == j,3]))
PWerr_data = data.frame( pw_tree = paste(i,j, sep = "-"), value = x/y)
}
}
如果我能看到我做错了什么,那就太好了。非常感谢!