我试图使用com.sim函数(simba-package)比较3个数据子集之间的平均相似度,但是我无法让函数忽略缺失值并正确运行分析。
我的数据和我到目前为止所做的一些背景:我的数据是二进制的,但与编写函数的数据类型不同,我使用的是骨架遗骸,这些遗骸通常是不完整和碎片化的。因此,我的数据矩阵的约10%具有缺失值。
当我在R
中运行此命令时com.sim(mydata,subs,simil =" jaccard",binary = TRUE,permutations = 1000,alpha = 0.05,bonfc = TRUE)
我收到以下错误消息:
diffmean出错(as.numeric(sim(veg [subs ==(comb [x,1]),],method = simil)),: 有NA值。考虑相应地设置na.rm
我随后将函数的代码修改为以下内容(粗体修改):
if(binary){ tmp< - lapply(c(1:nrow(comb)),function(x)diffmean(as.numeric(sim(veg [subs == (comb [x,1]),],method = simil,)),as.numeric(sim(veg [subs == (comb [x,2]),],method = simil,)), na.rm = TRUE ))
现在,该函数运行,但它排除了所有具有至少1个缺失值的情况(几乎是数据集的一半!!)。看起来它正在逐列删除带有NA的情况,而我更喜欢成对删除,因此仍然可以在具有缺失值的情况之间计算相似性系数(但是仅从计算中排除具有NA的变量)。有没有办法在com.sim中完成这个?我知道其他函数,比如simil(proxy-package)可以在计算Jaccard系数矩阵时处理缺失值,但似乎simba中的sim函数不是以这种方式构建的。
我没有编码经验(很明显吗?)所以我很感激任何有关选择的帮助或建议!
非常感谢,如果我能提供更多信息,请告诉我。 最好, 马特