如何解决R-in sqrt1-h * h:从rcorr内产生的NaN-可用的完整样本数据
我有一些代码可以创建调查问题回答矩阵,行-独特调查工具对问题的回答,对各个问题进行列。最后一栏已附加行手段。然后将其传递给rcorr进行评估。我有15组数据,但仅在此特定组内会抛出NaN,我看不出有什么区别。
m.rcorr <- rcorr(matrix,type="pearson")
此处链接了一个CSV of the matrix being passed。在某些栏中有合理的NA值,因为并非每个受访者都回答每个问题。其他响应是0、25、50、75或100。
在此数据集上,我收到两个警告:In sqrt(1 - h * h) : NaNs produced
。
我还有其他14组在没有生成NaN的情况下运行,这些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),integer(n))
h的分配就是卡住的地方
Error: object 'F_rcorr' not found
Hmisc软件包已安装和加载,同样,此代码在15次中有14次有效。
根据帮助,F_rcorr是内部Hmisc函数,不会被用户调用或未记录,因此我不确定下一步该怎么做。
我想回答两个问题:
- 为什么这组特别扔掉NaNs
- rcorr结果对列表$ r的最终值有什么影响。
附录:使用注释中建议的Hmisc :::前缀,我可以进一步了解数据中的两对,当h的值为1时,而不是1-h * h的值为0 ,它正在评估两个非常小的负数。它仅出现在这两对中,而没有发生在对角线上,或者发生在该对中的其他位置,所以我不确定为什么这两对产生怪异,因为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的结果是怎么回事,但是我相信我找到了解决该问题的一种无害方法。
解决方法
所以我想出了什么问题,然后给哈雷尔博士发了电子邮件,他回信说,在下一个Hmisc出版物中,他打算将sqtr(1 - h * h)
替换为max(0,1-h^2)
,这样可以解决此问题(更加简洁) ),就像我所做的一样,用0代替微小的负数。
我承认我和他一起回答了我的电子邮件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。