如何在 R 中循环命名列表?

问题描述 投票:0回答:1

我正在模拟不同参数值的模型。本质上,我获得了一个包含多个数据帧的列表对象

results

library(MASS)

model_beta <- 0
model_se <- 0
model_p <- 0

set.seed(seed = 42224)

sim <- function(S, T, rho1, rho2, sigma_u, sigma_v) {
  
  Sigma <- matrix(c(sigma_u, 0, 0, sigma_v), 2, 2)
  
  uv <- data.frame(mvrnorm(n = S * T,
                           mu = c(0, 0),
                           Sigma = Sigma))
  
  for (s in 1:S){
    
    x_t <- 0 + uv[(s - 1) * T + 1, 2]
    y_t <- 0 + uv[(s - 1) * T + 1, 1]
    
    for(i in 2:T) {
      x_t[i] <- rho2 * x_t[i - 1] + uv[(s - 1) * T + i, 2]
      y_t[i] <- rho1 * y_t[i - 1] + uv[(s - 1) * T + i, 1]
    }
    
    data <- data.frame(y_t, x_t)
    
    model <- lm(y_t ~ 1 + x_t, data)
    model_beta[s] <- model$coefficients[2]
    model_se[s] <- summary(model)$coefficients[2, 2]
    model_p[s] <- summary(model)$coefficients[, "Pr(>|t|)"][2]
    
    rm(x_t, y_t, data)
    
    all_ests <- as.data.frame(cbind(model_beta, model_se, model_p))
    
  }
  
  return(all_ests)
  
}

rho1_values <- c(0.1, 0.95, 0.99)
rho2_values <- c(0.1, 0.95, 0.99)
T_values <- c (100, 500, 1000)

results <- list()

for (rho1 in rho1_values) {
  for (rho2 in rho2_values) {
    for (T in T_values) {
      
      result <- sim(S = 100, T, rho1, rho2, sigma_u = 1, sigma_v = 1) 
      
      results[[paste("rho1", rho1, "rho2", rho2, "T", T)]] <- result
      
    }
  }
}

我想循环遍历列表对象中的每个数据帧

results
并执行操作,对其中的值求平均值。但
results$key$model_beta
似乎不起作用。我想知道如何执行此循环以及如何调用我需要的变量。如有任何帮助,我们将不胜感激。

# recover beta mean and se estimates 

mean_betas <- list()
sd_betas <- list()
p_betas <- list()

for (key in names(results)) {
  
  beta <- mean(results$key$model_beta)
  sd <- sd(results$key$model_beta)
  ttest <- sum(results$key$model_p <= 0.05)
  
  mean_betas[[key]] <- beta
  sd_betas[[key]] <- sd
  p_betas[[key]] <- ttest
  
}
r dplyr tidyverse simulation data-cleaning
1个回答
0
投票

写一个小的汇总函数并放入

sapply

> fn <- \(x) c(b=mean(x$model_beta), SE=sd(x$model_beta), tt=sum(x$model_p <= .05))
> t(sapply(results, fn))
                                       b          SE tt
rho1 0.1 rho2 0.1 T 100     2.149949e-03 0.101009530  4
rho1 0.1 rho2 0.1 T 500    -5.390908e-03 0.046816577  7
rho1 0.1 rho2 0.1 T 1000   -2.366675e-03 0.030186145  5
rho1 0.1 rho2 0.95 T 100    2.558207e-03 0.050902888  6
rho1 0.1 rho2 0.95 T 500   -3.165286e-04 0.018866196 11
rho1 0.1 rho2 0.95 T 1000   1.608793e-04 0.011022998  7
rho1 0.1 rho2 0.99 T 100    2.443499e-03 0.037830310  7
rho1 0.1 rho2 0.99 T 500   -7.282507e-05 0.010791572  6
rho1 0.1 rho2 0.99 T 1000  -1.502523e-03 0.005661447 10
rho1 0.95 rho2 0.1 T 100   -4.565932e-03 0.288954389 12
rho1 0.95 rho2 0.1 T 500   -1.133511e-02 0.134098385  3
rho1 0.95 rho2 0.1 T 1000   8.865955e-03 0.109455782  6
rho1 0.95 rho2 0.95 T 100  -4.527339e-04 0.360571654 60
rho1 0.95 rho2 0.95 T 500   7.518125e-03 0.186272942 61
rho1 0.95 rho2 0.95 T 1000  6.602277e-03 0.140099632 62
rho1 0.95 rho2 0.99 T 100   7.203229e-02 0.346791084 66
rho1 0.95 rho2 0.99 T 500   3.040713e-03 0.151638473 81
rho1 0.95 rho2 0.99 T 1000  1.301691e-03 0.094071457 70
rho1 0.99 rho2 0.1 T 100   -3.140329e-02 0.351619905  7
rho1 0.99 rho2 0.1 T 500    2.359513e-02 0.253493421  7
rho1 0.99 rho2 0.1 T 1000  -6.793740e-02 0.203633365  6
rho1 0.99 rho2 0.95 T 100  -2.576093e-02 0.570548483 67
rho1 0.99 rho2 0.95 T 500  -2.155015e-02 0.483091736 74
rho1 0.99 rho2 0.95 T 1000 -6.842498e-03 0.369940130 82
rho1 0.99 rho2 0.99 T 100  -5.356651e-02 0.527453321 75
rho1 0.99 rho2 0.99 T 500  -5.667934e-02 0.335362430 82
rho1 0.99 rho2 0.99 T 1000 -4.967689e-02 0.283655774 84
© www.soinside.com 2019 - 2024. All rights reserved.