使用蒙特卡洛模拟的错误传播数据帧
Error propagation dataframe using Montecarlo simulation
我正在对预测模型进行误差分析,我需要计算全局误差,也就是说,我需要计算传播的结果误差
间接测量误差。我的数据“df”看起来与此类似
其中'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。
感谢您的帮助
这是为数据帧的每一行获取 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
我正在对预测模型进行误差分析,我需要计算全局误差,也就是说,我需要计算传播的结果误差 间接测量误差。我的数据“df”看起来与此类似
其中'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。 感谢您的帮助
这是为数据帧的每一行获取 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