在 R 中编程灵敏度分析:改变 1 个参数(列),保持其他参数不变。更好的方法?
Posted
技术标签:
【中文标题】在 R 中编程灵敏度分析:改变 1 个参数(列),保持其他参数不变。更好的方法?【英文标题】:Programming a sensitivity analysis in R: Vary 1 parameter (column), hold others constant. Better way? 【发布时间】:2013-05-10 08:21:05 【问题描述】:我想测试计算对 4 个参数值的敏感性。为此,我想一次更改一个参数——即更改变量 1,将变量 2-4 保持在“默认”值(例如 1)。我认为组织这些值的一种简单方法是在 data.frame() 中,其中每一列对应一个不同的变量,每一行对应一组应该进行计算的参数。然后,我将遍历数据帧的每一行,根据该行中的参数值评估一个函数。
这似乎应该是一件简单的事情,但我找不到快速的方法。
问题可能是我对敏感性分析进行编程的整体方法,但我想不出一种好的、简单的方法来对上述 data.frame 进行编程。
我生成data.frame的代码:
Adj_vals <- c(seq(0, 1, by=0.1), seq(1.1, 2, by=0.1)) #a series of values for 3 of the parameters to use
A_Adj_vals <- 10^(seq(1,14,0.5)) #a series of values for another one of the parameters to use
n1 <- length(Adj_vals)
n2 <- length(A_Adj_vals)
data.frame(
"Dg_Adj"=c(Adj_vals, rep(1, n1*2+n2)), #this parameter's default is 1
"Df_Adj"=c(rep(1, n1), Adj_vals, rep(1, n1+n2)), #this parameter's default is 1
"sd_Adj"=c(rep(1, n1*2), 0.01, Adj_vals[-1], rep(1, n2)), #This parameter has default of 1, but unlike the others using Adj_vals, it can only take on values >0
"A"=c(rep(1E7, n1*3), A_Adj_vals) #this parameter's default is 10 million
)
此代码生成所需的 data.frame。有没有更简单的方法来达到同样的效果?我会接受sd_Adj
代替0
而不是0.01
的答案。
【问题讨论】:
【参考方案1】:这是否更好是值得商榷的,但另一种方法是遵循以下模式:
defaults<-data.frame(a=1,b=1,c=1,d=10000000)
merge(defaults[c("b","c","d")],data.frame(a=c(seq(0, 1, by=0.1), seq(1.1, 2, by=0.1))))
这应该很容易组合成一个函数,该函数会根据您要合并的数据框中的列名等自动从默认值中删除正确的列
【讨论】:
以上是关于在 R 中编程灵敏度分析:改变 1 个参数(列),保持其他参数不变。更好的方法?的主要内容,如果未能解决你的问题,请参考以下文章