本征误差(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
我正在尝试学习如何在 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