使用 sapply 在 R 中查找条件期望

Find conditional expectation in R using sapply

我有一个包含 6 个变量的数据框。 df 是我的数据框的名称。

我使用

找到了 e(df 中的变量)的期望值
Ee <- mean(df[["e"]])

如何在 {0,1} 中找到 z 的 E[e|Z=z]?

同样,如何使用 sapply 函数为 {1...20} 中的 x 找到 E[e|X=x]?

这是一个想法:

set.seed(42)
sampdata <- data.frame(e = runif(1000), z = sample(0:1, size=1000, replace=TRUE), x = sample(1:20, size=1000, replace=TRUE))
head(sampdata)
#           e z  x
# 1 0.9148060 1 15
# 2 0.9370754 0  2
# 3 0.2861395 1 13
# 4 0.8304476 1 12
# 5 0.6417455 1  4
# 6 0.5190959 0  7

aggregate(e ~ z, data = sampdata, FUN = mean)
#   z         e
# 1 0 0.4910876
# 2 1 0.4852118
aggregate(e ~ x, data = sampdata, FUN = mean)
#     x         e
# 1   1 0.5097038
# 2   2 0.4495141
# 3   3 0.5077897
# 4   4 0.5300375
# 5   5 0.4549345
# 6   6 0.5122537
# 7   7 0.4704425
# 8   8 0.4911532
# 9   9 0.5572367
# 10 10 0.4634067
# 11 11 0.4408758
# 12 12 0.4815633
# 13 13 0.5503166
# 14 14 0.4922317
# 15 15 0.5205427
# 16 16 0.4999023
# 17 17 0.4784551
# 18 18 0.4282990
# 19 19 0.4202285
# 20 20 0.4852303

但是如果你觉得一定要用sapply,那么这个可以等价。

sapply(setNames(nm = unique(sampdata$z)), function(Z) mean(sampdata[["e"]][ sampdata[["z"]] == Z ]))
#         1         0 
# 0.4852118 0.4910876 
sapply(setNames(nm = unique(sampdata$x)), function(X) mean(sampdata[["e"]][ sampdata[["x"]] == X ]))
#        15         2        13        12         4         7        19        16        10         1 
# 0.5205427 0.4495141 0.5503166 0.4815633 0.5300375 0.4704425 0.4202285 0.4999023 0.4634067 0.5097038 
#         9         3        14        18        11        20         5         8        17         6 
# 0.5572367 0.5077897 0.4922317 0.4282990 0.4408758 0.4852303 0.4549345 0.4911532 0.4784551 0.5122537 

选项dplyr

library(dplyr)
sampdata %>%
   group_by(z) %>%
   summarise(e = mean(e))

数据

set.seed(42)
sampdata <- data.frame(e = runif(1000), z = sample(0:1, size=1000, replace=TRUE),
    x = sample(1:20, size=1000, replace=TRUE))