gpt4 book ai didi

来自不平衡面板数据的 R 样本

转载 作者:行者123 更新时间:2023-12-04 20:09:26 30 4
gpt4 key购买 nike

我正在处理不平衡的面板数据,我想从中抽取一个随机样本,该样本不受每个单位不同观察次数的影响。例如,在下面的代码中,IBM 被选中的可能性是 GOOG 的两倍,被选中的可能性是 MSFT 的五倍。有没有办法对这些数据进行抽样,就好像每个公司/年份被选中的概率相等一样?可能通过使用采样包?

df <- data.frame(COMPANY=c(rep('IBM',50),rep('GOOG',25),rep('MSFT',10)), YEAR=c(1961:2010,1988:2012,1996:2005), PROFIT=rnorm(85))
df

df[sample(nrow(df), 20, replace=FALSE), ]

最佳答案

您可以这样做:

probs <- 1 / table(df$COMPANY)[df$COMPANY]
df[sample(nrow(df), 20, replace = FALSE, prob = probs), ]

让我们测试一下:
table(df[sample(nrow(df), 1e6, replace = TRUE, prob = probs), "COMPANY"])
# GOOG IBM MSFT
# 333499 333080 333421

我们不是让每一行的概率都等于 1/(50+25+10),而是将它们归一化,这样每家公司都有相同的概率被选中:
tapply(probs, df$COMPANY, sum)
# GOOG IBM MSFT
# 1 1 1

( probs 总和为 3 而不是 1,但 sample 负责处理)。为了让数学更清晰,让我们举一个简单的例子(它的总和不等于 1,但这不是问题):
vec <- c(1, 1, 2)
as.vector(1 / table(vec)[vec])
# [1] 0.5 0.5 1.0

关于来自不平衡面板数据的 R 样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20527918/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com