R-In sqrt(1-h*h):从rcorr内产生的NaNs-可用的完整样本数据



我有一些代码可以创建一个调查问题回答矩阵,Rows-来自唯一调查工具的问题答案,列单个问题。最后一列附加了行的意思。然后将其传递给rcorr进行评估。我有15组数据,但只有在这个特定的数据集中,它才会抛出NaN,我看不出有什么区别

m.rcorr <- rcorr(matrix, type="pearson")

此处链接了正在传递的矩阵的CSV。在一些专栏中,NA有合法的价值观,因为并不是每个受访者都回答每个问题。其他响应为0、25、50、75或100。

我在这个数据集上得到两个警告:In sqrt(1 - h * h) : NaNs produced

我有另外14个集在没有生成NA的情况下运行,它们有不同的NA出现,我甚至研究了0是否是问题所在,但其他集再次处理了这些问题。

接下来,我进入rcorr,将矩阵分配给x:

type <- "pearson"
{
type <- match.arg(type)
if (!missing(y)) 
x <- cbind(x, y)
x[is.na(x)] <- 1e+50
storage.mode(x) <- "double"
p <- as.integer(ncol(x))
if (p < 1) 
stop("must have >1 column")
n <- as.integer(nrow(x))
if (n < 5) 
stop("must have >4 observations")
h <- .Fortran(F_rcorr, x, n, p, itype = as.integer(1 + (type == "spearman")), hmatrix = double(p * p), npair = integer(p * p), double(n), double(n), double(n), double(n), double(n), integer(n))

h的分配是我陷入的地方

Error: object 'F_rcorr' not found

包Hmisc已安装并加载,同样,此代码在15次中工作14次。

根据帮助,F_rcorr是一个内部Hmisc函数,不会被用户调用或未记录,所以我不太确定下一步该去哪里。

我想回答两个问题:

  1. 为什么这个特定的集合会抛出NaN
  2. 从rcorr结果来看,这对列表$r的最终值有什么影响

附录:使用评论中建议的Hmisc:::前缀,我能够更进一步,并在我的数据中发现两对,当h的值为1时,而不是1-h*h计算为0,它计算为两个非常小的负数。它只发生在这两对中,没有发生在对角线上,也没有发生在这对值为1的其他地方,所以我不知道为什么这两对会产生奇怪的情况,因为1-1*1应该全天等于0。

然而,为了避免这种情况,我将rcorr函数复制到一个新函数中,在p赋值之前添加这两行,然后取新D的sqrt,用0替换负数。

D <- 1 - h * h
D[D<0] <- 0
P <- matrix(2 * (1 - pt(q = abs(h) * sqrt(npair - 2)/sqrt(D), df = npair - 2)), ncol = p)

我仍然想知道是什么导致了计算中出现微小负数而不是0的结果,但我相信我已经找到了一种无害的方法

所以我想好了,给Harrell博士发了电子邮件,他回复说,在Hmisc的下一期出版物中,他将用max(0, 1-h^2)代替sqtr(1 - h * h),这将像我一样(更干净地(解决问题,用0代替微小的负数。

我承认我有点喜欢他回复我的电子邮件。

相关内容

  • 没有找到相关文章

最新更新