Я пытаюсь сделать глобальный анализ чувствительности, используя fast99() в пакете чувствительности в R. Просто, чтобы дать вам представление о том, что я пытаюсь сделать, вот модель, которую я построил только для демонстрация:R Чувствительный пакет (fast99)
library(sensitivity)
factors <- c("x1", "x2", "x3")
modelRun <- function (Input) {
(Input[,1]-0.5)*2 + (Input[,2]+1)*5 + (Input[,3]-0.2)*3
}
test <- fast99(modelRun, factors, n = 1000, q.arg=list(min=0, max=2))
со следующими результатами испытаний:
> test
Call:
fast99(model = modelRun, factors = factors, n = 1000, q.arg = list(min = 0, max = 2))
Model runs: 3000
Estimations of the indices:
first order total order
x1 0.1053816 0.1061664
x2 0.6572669 0.6593234
x3 0.2368125 0.2388793
теперь я могу использовать это, чтобы сказать, переменная x2 является ключевой переменной.
Мой вопрос: могу ли я реализовать fast99() на модели черного ящика, которая считывает txt-файл в качестве входных параметров? Например:
factors <- c("x1", "x2", "x3")
newModel <- function(Input) {
params <- readLines("inputtext.txt")
params[17] <- toString(Input[,1])
params[23] <- toString(Input[,2])
params[25] <- toString(Input[,3])
writeLine(params, "inputtext.txt")
source("blackboxmodel.R") # this model then reads inputtext.txt file as input parameters
y <- read.csv("output.csv")
return(y$results)
}
library(sensitivity)
test <- fast99(newModel, factors, n = 10, q.arg=list(min=0, max=2))
У меня есть гораздо больше параметров и мой код действительно громоздкий, поэтому я использую сокращенный вариант для этого поста. Когда я запускаю это, модель останавливается, потому что я думаю, что она векторизует все 10 образцов и передает их в текстовый файл.
Вместо того, что мне нужно, как это для текстовой строки:
"x1 = 1"
я получаю
"x1 = 1, 1.4, 1.8, 1.8, 1.4, 1, 0.6, 0.2, 0.2, 0.6, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN"
Поскольку текстовый файл имеет несколько значений для переменной x1 (и остальных переменных, как хорошо), модель черного ящика перестает работать.
Я не проектировал модель черного ящика, поэтому единственный способ для меня пройти через модель - это изменить текстовый файл. Как я могу использовать fast99(), сначала передав эти параметры в текстиль?