首页 > 解决方案 > 使用蒙特卡罗模拟的错误传播数据帧

问题描述

我正在对预测模型进行误差分析,我需要计算全局误差,也就是说,我需要计算间接测量误差传播的结果误差。我的数据“df”看起来像这样

XY X_SE Y_SE 1.43 0.64 2.00 0.09 2.25 0.47 2.00 0.07 2.36 0.72 2.00 0.07 2.07 2.05 0.63 2.00 0.07 1.54 1.54 0.90 2.00 0.09 1.31 1.31 0.94 2.00

其中“x”和“y”是测量变量,“x_se”和“y_se”是这些测量的标准误差

我在第一行使用了包'qpcR'中的函数'propagate'

EXPR <-  expression((0.1*x)*(y/(y+0.1)))
x <- c(1.43, 2)
y <- c(0.64, 0.09)
DF <- cbind(x, y)
res <- propagate(expr = EXPR, data = DF, type = "stat",do.sim = TRUE, verbose = TRUE)
res$summary

或者这个来自“metRology”包

expr <- expression((0.1*a)*(b/(b+0.1)))
x <- list(a=1.43, b=0.64)
u <- list(2,0.1)
u.expr<-uncert(expr, x, u, method="MC",B=200)
u.expr

它们都可以工作,但我不知道如何将这些函数中的任何一个应用于整个 df。谢谢你的帮助

标签: rfunctiondataframemontecarlopropagation

解决方案


这是获取res$summary数据框每一行的一种可能的解决方案。

您首先创建一个自定义函数my_fun,该函数执行您尝试对数据框的单行执行的操作。然后,您apply将此函数应用于数据框的每一行。最终结果将是一个list与您的数据框行一样多的元素。

my_fun <- function(r){
  EXPR <- expression((0.1 * x) * (y / (y + 0.1)))
  x <- c(r[["x"]], r[["x_se"]])
  y <- c(r[["y"]], r[["y_se"]])
  DF <- cbind(x, y)
  res <- propagate(expr = EXPR, data = DF, type = "stat", do.sim = TRUE, verbose = TRUE)
  return(res$summary)
}

set.seed(1)
apply(df, 1, my_fun)

输出

[[1]]
                  Sim Perm       Prop
Mean        0.1233798  NaN  0.1233898
Std.dev.    0.1726114   NA  0.1730206
Median      0.1234929   NA         NA
MAD         0.1708902   NA         NA
Conf.lower -0.2153721   NA -0.2157244
Conf.upper  0.4686238   NA  0.4625041

[[2]]
                  Sim Perm       Prop
Mean        0.1849104  NaN  0.1849310
Std.dev.    0.1645677   NA  0.1650419
Median      0.1851380   NA         NA
MAD         0.1652076   NA         NA
Conf.lower -0.1401244   NA -0.1385452
Conf.upper  0.5155102   NA  0.5084072

[[3]]
                  Sim Perm       Prop
Mean        0.2070037  NaN  0.2070098
Std.dev.    0.1754712   NA  0.1756395
Median      0.2057387   NA         NA
MAD         0.1768489   NA         NA
Conf.lower -0.1308923   NA -0.1372374
Conf.upper  0.5528197   NA  0.5512569

[[4]]
                  Sim Perm       Prop
Mean        0.1766511  NaN  0.1766596
Std.dev.    0.1723788   NA  0.1726441
Median      0.1744966   NA         NA
MAD         0.1736575   NA         NA
Conf.lower -0.1552201   NA -0.1617167
Conf.upper  0.5203006   NA  0.5150359

[[5]]
                  Sim Perm       Prop
Mean        0.1384704  NaN  0.1384753
Std.dev.    0.1798246   NA  0.1800144
Median      0.1376255   NA         NA
MAD         0.1782177   NA         NA
Conf.lower -0.2151249   NA -0.2143465
Conf.upper  0.4946514   NA  0.4912970

[[6]]
                  Sim Perm       Prop
Mean        0.1182867  NaN  0.1182874
Std.dev.    0.1805740   NA  0.1807828
Median      0.1184392   NA         NA
MAD         0.1805303   NA         NA
Conf.lower -0.2378475   NA -0.2360404
Conf.upper  0.4731363   NA  0.4726152

[[7]]
                  Sim Perm       Prop
Mean        0.1287621  NaN  0.1287730
Std.dev.    0.1740355   NA  0.1743982
Median      0.1256472   NA         NA
MAD         0.1740543   NA         NA
Conf.lower -0.2106699   NA -0.2130411
Conf.upper  0.4720430   NA  0.4705872

推荐阅读