4

我想测试计算对 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_Adj0不是0.01.

4

1 回答 1

0

如果这更好,这是值得商榷的,但另一种方法是遵循这种模式:


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))))

这应该很容易制作成一个函数,该函数会根据您要合并的数据框中的列名等自动从默认值中删除正确的列

于 2013-05-15T18:10:13.983 回答