我有一个具有1000次重复的数据集。每个重复包含50个条目。我需要为每次重复运行并输出一些统计信息。似乎for循环是正确的方法,但是我无法使其工作。
示例数据集(每个代表被截断为3个样本)以及我想在每组代表上运行的代码
'''R
####DATASET
Rep Y_Star_T m
1 3 3
1 8 7
1 9 6
2 13 2
2 5 5
2 19 16
3 12 7
3 7
3 9 6
####Global variables needed outside the loop
a <- .25
L <- 75
W <- 20
big_N <- (L*W)/a
####Begin appended calculations needed for the loop
w <- netdata$y_star_T/netdata$m
mu_hat <- (1/n *sum(w))/a
tau_hat <- (big_N*a)*mu_hat
var_mu_hat <- (1/(n*(n-1))*sum((w-mu_hat)^2))/a^2
var_tau_hat <- (big_N*a)^2*var_mu_hat
我想要一个长度等于重复次数的向量,其中包含上面计算出的值(例如,mu_hat)。对于1000次重复,向量长度将为1000。如果简单,或者列表列表也可以工作,则mu_hat,tau_hat等每个向量可以有一个向量。
答案 0 :(得分:0)
您必须定义一个辅助函数来计算所需的统计信息。然后*apply
通过列Rep
定义的组起作用。
funStats <- function(DF, a = 0.25, L = 75, W = 20, big_N = L*W/a){
n <- nrow(DF)
w <- DF[["Y_Star_T"]]/DF["m"]
mu_hat <- (1/n *sum(w))/a
tau_hat <- (big_N*a)*mu_hat
var_mu_hat <- (1/(n*(n-1))*sum((w-mu_hat)^2))/a^2
var_tau_hat <- (big_N*a)^2*var_mu_hat
res <- c(mu_hat = mu_hat,
tau_hat = tau_hat,
var_mu_hat = var_mu_hat,
var_tau_hat = var_tau_hat
)
res
}
sapply(split(netdata, netdata$Rep), funStats)
# 1 2 3
#mu_hat 4.857143e+00 1.158333e+01 6.428571e+00
#tau_hat 7.285714e+03 1.737500e+04 9.642857e+03
#var_mu_hat 1.065170e+02 6.557882e+02 3.721224e+02
#var_tau_hat 2.396633e+08 1.475523e+09 8.372755e+08
result <- lapply(split(netdata, netdata$Rep), funStats)
result <- do.call(rbind, result)
result
# mu_hat tau_hat var_mu_hat var_tau_hat
#1 4.857143 7285.714 106.5170 239663265
#2 11.583333 17375.000 655.7882 1475523437
#3 6.428571 9642.857 372.1224 837275510
数据。
请注意,第8行已被注释掉。
netdata <- read.table(text = "
Rep Y_Star_T m
1 3 3
1 8 7
1 9 6
2 13 2
2 5 5
2 19 16
3 12 7
#3 7
3 9 6
", header = TRUE)