首页 > 解决方案 > 特征误差(Sigma,对称 = TRUE):MetRology uncertMC 中的 0 x 0 矩阵与 2x2 相关矩阵

问题描述

我正在尝试学习如何在 R 中使用 MetRology 包。我一直在使用 GUM 手册附录 H.2 中的数据作为一个简单的示例来尝试蒙特卡罗不确定性传播,包括相关性。我有两个变量 V 和 I。因此我有一个 2x2 相关矩阵,其中 I、V 在非对角线元素中的相关性。如果我将此矩阵提供给 uncertMC 函数,则会收到错误消息:“特征错误(Sigma,对称 = TRUE):0 x 0 矩阵”。如果我不包括相关矩阵,我不会得到错误。为什么在包含相关性时会出现错误?计量手册有一个包含四个变量和一个 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

标签: rmontecarlo

解决方案


我正在检查回溯和 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

推荐阅读