【问题标题】:Find conditional expectation in R using sapply使用 sapply 在 R 中查找条件期望
【发布时间】:2021-01-26 03:38:41
【问题描述】:

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

我使用

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

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

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

【问题讨论】:

  • sapply 是错误的方法。 mean(df[["e"]][ df[["Z"]] %in% 0:1 ]) 可能会这样做,但无法确定,因为您的问题不包含示例数据。
  • sapply(split(df$e, df$z), mean)
  • 如果其中一个答案解决了您的问题,请accept it;这样做不仅为回答者提供了一些积分,而且还为有类似问题的读者提供了一些关闭。尽管您只能接受一个答案,但您可以选择对您认为有帮助的人进行投票。 (如果仍有问题,您可能需要编辑您的问题并提供更多详细信息。)

标签: r conditional-statements mean sapply


【解决方案1】:

这是一个想法:

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 

【讨论】:

    【解决方案2】:

    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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-05
      • 2023-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多