本征误差(Sigma,对称 = TRUE):MetRology uncertMC 中的 0 x 0 矩阵与 2x2 相关矩阵

Error in eigen(Sigma, symmetric = TRUE) : 0 x 0 matrix in MetRology uncertMC with 2x2 correlation matrix

我正在尝试学习如何在 R 中使用 MetRology 包。我一直在使用 GUM 手册附录 H.2 中的数据作为一个简单示例来尝试 Monte Carlo 不确定性传播,包括相关性。我有两个变量 V 和 I。因此我有一个 2x2 相关矩阵,其中 I、V 在非对角线元素中具有相关性。如果我将此矩阵提供给 uncertMC 函数,我会收到错误:"Error in eigen(Sigma, symmetric = TRUE) : 0 x 0 matrix"。如果我不包括相关矩阵,我不会得到错误。为什么包含相关性时会出现错误? metRology 手册中有一个包含四个变量和一个 4x4 相关矩阵的示例,这对我很有用。有什么明显的我做错了吗?

提前致谢!

library(errors) # for gum H.2 dataset
library(metRology) # for uncertMC

#extract relevant data

meanV  <-  with(GUM.H.2, mean(V))
meanI  <-  with(GUM.H.2, mean(I))

#uncertainties of the mean as per GUM (over sqrt(N))

uV <-  with(GUM.H.2, sd(V)/sqrt(length(V)))
uI <-  with(GUM.H.2, sd(I)/sqrt(length(I)))

# correlation between V and I

corIV  <-  with(GUM.H.2, cor(I,V))

#set up a 2 x 2 correlation matrix

u.cor <-  diag(1,2)

# off-diagonal elements

u.cor[1,2] <- u.cor[2,1] <-  corIV

#set up inputs for uncertMC

# the expression Z = V/I

expr <-  expression(V/I)

x <- list(V= meanV, I= meanI)

u  <-  list(V=uV, I=uI)

u.MC <-  uncertMC(expr = expr, x = x, u = u, cor = u.cor)

#errors with Error in eigen(Sigma, symmetric = TRUE) : 0 x 0 matrix

我正在检查 traceback 和 uncertMC 函数,有一段代码定义了 Sigma:

Sigma = cov[cor.vars, cor.vars]

cor.vars 定义为:

cor.vars <- which(rowSums(cor) > (1 + .Machine$double.eps * 
            nrow(cor)))

问题是,如果你有负相关,最终 rowSums(cor) 将不满足条件,所以你会得到 integer(0).

正如您所说,metRology 手册中有一个包含四个变量和一个 4x4 相关矩阵的示例,它适用于您,但是如果您更改相关符号,您会得到相同的错误:

expr <- expression(a+b*2+c*3+d/2)
x <- list(a=1, b=3, c=2, d=11)
u <- lapply(x, function(x) x/10)
u.cor<-diag(1,4)
u.cor[3,4]<-u.cor[4,3]<- -0.5 # change sign to negative
u.formc.MC<-uncertMC(~a+b*2+c*3+d/2, x, u, cor=u.cor, keep.x=TRUE)
u.formc.MC

# Error in eigen(Sigma, symmetric = TRUE) : 0 x 0 matrix