有没有一种简单的方法来探索在R中调整参数时函数的输出是如何变化的?
我正在对数据集应用一种方法,并试图确定它对每个参数的敏感性。该方法使用了“通用”值,但我很好奇,如果每个值都较大或较小,输出会有什么不同。用一个简单的例子来描述可能更容易:有没有一种简单的方法来探索在R中调整参数时函数的输出是如何变化的?,r,R,我正在对数据集应用一种方法,并试图确定它对每个参数的敏感性。该方法使用了“通用”值,但我很好奇,如果每个值都较大或较小,输出会有什么不同。用一个简单的例子来描述可能更容易: library(tidyverse) library(magrittr) data <- data.frame(let = c("Alpha","Beta","Gamma","Delta"), num = c(1,2,3,4)) data$var = NA ftn <- function(df, A, B,
library(tidyverse)
library(magrittr)
data <- data.frame(let = c("Alpha","Beta","Gamma","Delta"), num = c(1,2,3,4))
data$var = NA
ftn <- function(df, A, B, C){
df %<>% mutate(var = num * (A*3 + B*(2/3) - C))
}
data <- ftn(data, A = 4, B = 2, C = 6)
因此,这将是绘制x1与改变参数的情况,其中ymin=x0.5,ymax=x1.5
我有点不知所措,不知道如何在不手动更改数字的情况下实现这一点。我试着简单地输入一个向量(例如a=c(2,4,6)),但没有成功。我很感激在这个可复制的示例中,只需手动更改内容并单独编写它们不会花费太长时间,但在我的实际代码中,这将是一个真正的faff。我想我理解您在做什么。一种方法是使用
tidyr
包中的crossing
中的一些技巧来制作设计矩阵。然后可以使用nest
和map
获得结果。如下所示:
# Cross makes the model grid
crossing(A = c(2,4,6), B = c(1,2,3), C = c(3,6,9), num = c(1,2,3,4)) %>%
mutate(scenario_id = row_number()) %>% # ID for grouping
group_by(scenario_id) %>% # Group for nesting
nest() %>% # Nesting
mutate(result = map(data, ftn)) %>% # Now apply your function for each scenario
unnest() # Return the result
这会给你类似的东西:
# A tibble: 108 x 10
scenario_id A B C num A1 B1 C1 num1 var
<int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 2 1 3 1 2 1 3 1 3.67
2 2 2 1 3 2 2 1 3 2 7.33
3 3 2 1 3 3 2 1 3 3 11
4 4 2 1 3 4 2 1 3 4 14.7
5 5 2 1 6 1 2 1 6 1 0.667
#一个tible:108 x 10
方案id A B C数值A1 B1 C1数值M1变量
1 1 2 1 3 1 2 1 3 1 3.67
2 2 2 1 3 2 2 1 3 2 7.33
3 3 2 1 3 3 2 1 3 3 11
4 4 2 1 3 4 2 1 3 4 14.7
5 5 2 1 6 1 2 1 6 1 0.667
# A tibble: 108 x 10
scenario_id A B C num A1 B1 C1 num1 var
<int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 2 1 3 1 2 1 3 1 3.67
2 2 2 1 3 2 2 1 3 2 7.33
3 3 2 1 3 3 2 1 3 3 11
4 4 2 1 3 4 2 1 3 4 14.7
5 5 2 1 6 1 2 1 6 1 0.667