R 获得用于模拟的多变量高、低表达式矩阵的有效方法

R 获得用于模拟的多变量高、低表达式矩阵的有效方法,r,performance,dataframe,matrix,transform,R,Performance,Dataframe,Matrix,Transform,我想要一个矩阵,包括多个变量中每个变量的一个高(高于平均值1 sd)和一个低(低于中值1 sd)表达式 在一个变量中,对于每个变量,我希望有一个高表达式,而所有其他变量都是低表达式 此外,我希望有一个变量,其中所有其他变量都设置为0,然后每个变量都有一个high和low表达式 我想用它来做模型预测 对于变量1,我已经需要三个变量: pred_da <- data.frame(var1 = c(median(da$var1)+1*sd(da$var1), median(da$var1)-1*

我想要一个矩阵,包括多个变量中每个变量的一个高(高于平均值1 sd)和一个低(低于中值1 sd)表达式

在一个变量中,对于每个变量,我希望有一个高表达式,而所有其他变量都是低表达式

此外,我希望有一个变量,其中所有其他变量都设置为0,然后每个变量都有一个high和low表达式

我想用它来做模型预测

对于变量1,我已经需要三个变量:

pred_da <- data.frame(var1 = c(median(da$var1)+1*sd(da$var1), median(da$var1)-1*sd(da$var1), median(da$var1)-1*sd(da$var1)), var2 = c(median(da$var2)-1*sd(da$var2), median(da$var2)+1*sd(da$var2), median(da$var2)-1*sd(da$var2)), var3 = c(median(da$var3)-1*sd(da$var3), median(da$var3)-1*sd(da$var3), median(da$var3)+1*sd(da$var3)))

pred_da这是一个有点让人心烦意乱的非标准评估,但我设法让它与我的示例数据一起工作:

library(tidyverse)

da <- tibble(ID = 1:10, V1 = rnorm(10, 0, 1), V2 = rpois(10, 2), V3 = rexp(10, 1))

varnames <- colnames(da)[-1]

median_da <- da %>%
  select(- ID) %>%
  mutate_all(~ median(.x)) %>%
  slice(1)

sds <- da %>%
  select(- ID) %>%
  summarise_all(sd)

add_sd <- function(varname, sd) {

  median <- median_da %>%
    pluck(varname)

  median_low <- median_da %>%
    mutate(!!varname := median - sd)

  median_high <- median_da %>%
    mutate(!!varname := median + sd)

  median_low %>%
     bind_rows(median_high) 

}

preds_da <- map2(varnames, sds, ~ add_sd(varname = .x, sd = .y)) %>% bind_rows()


库(tidyverse)
da%
切片(1)
sds%
选择(-ID)%%>%
总结(sd)
加上%
绑定行(中间值高)
}
preds_da%bind_行()

非标准评估有点让人心烦意乱,但我设法让它与我的示例数据一起工作:

library(tidyverse)

da <- tibble(ID = 1:10, V1 = rnorm(10, 0, 1), V2 = rpois(10, 2), V3 = rexp(10, 1))

varnames <- colnames(da)[-1]

median_da <- da %>%
  select(- ID) %>%
  mutate_all(~ median(.x)) %>%
  slice(1)

sds <- da %>%
  select(- ID) %>%
  summarise_all(sd)

add_sd <- function(varname, sd) {

  median <- median_da %>%
    pluck(varname)

  median_low <- median_da %>%
    mutate(!!varname := median - sd)

  median_high <- median_da %>%
    mutate(!!varname := median + sd)

  median_low %>%
     bind_rows(median_high) 

}

preds_da <- map2(varnames, sds, ~ add_sd(varname = .x, sd = .y)) %>% bind_rows()


库(tidyverse)
da%
切片(1)
sds%
选择(-ID)%%>%
总结(sd)
加上%
绑定行(中间值高)
}
preds_da%bind_行()

我认为Adam B.的解决方案将中位数而不是中位数-sd作为结果(见下面可复制示例中的代码)

此外,示例代码使用中值+/-sd,而文本将“高”定义为高于平均值(非中值)1 sd,因此不清楚您想要哪个。在这两种情况下,我都选择了中位数

通过在矩阵中填充每列的“低”表达式,并在对角线中添加“高”表达式,可以很容易地使用基数R实现这一点:

#数据(所有版本通用)
种子(1)

da我认为Adam B.的解决方案将中位数而不是中位数-sd作为结果(见下面可复制示例中的代码)

此外,示例代码使用中值+/-sd,而文本将“高”定义为高于平均值(非中值)1 sd,因此不清楚您想要哪个。在这两种情况下,我都选择了中位数

通过在矩阵中填充每列的“低”表达式,并在对角线中添加“高”表达式,可以很容易地使用基数R实现这一点:

#数据(所有版本通用)
种子(1)

da您是否可以共享您的数据样本。这使得提供帮助变得容易多了。我认为这是可以做到的,只是你能像dput(head(da))那样将输出粘贴到你的帖子中吗?你能分享你的数据样本吗。它使提供帮助变得更加容易。我认为它是可以做到的,只是你能像dput(head(da))那样将输出粘贴到你的帖子中吗?一段很棒的代码,它工作得非常完美,谢谢!我相信这个解决方案在“低”的结果中使用了中位数而不是中位数-sd。请参阅下面答案中的代码,以获取可复制的示例。这是一段非常棒的代码,工作非常完美,谢谢!我相信这个解决方案在“低”的结果中使用了中位数而不是中位数-sd。请参阅下面答案中的代码,以获得可复制的示例。是的,这同样有效,非常感谢!事实上,我没有说清楚,对不起。你是对的,我完全忘记了“低”观测值!函数
add_sd()
可以很容易地修改,输出两行数据,一行用于variable+sd,另一行用于variable-sd。我更改了答案,请参见下文,这同样有效,非常感谢!事实上,我没有说清楚,对不起。你是对的,我完全忘记了“低”观测值!函数
add_sd()
可以很容易地修改,输出两行数据,一行用于variable+sd,另一行用于variable-sd