【问题标题】:Calculating group means with own group excluded in MATLAB计算组均值在 MATLAB 中排除了自己的组
【发布时间】:2018-04-02 16:24:26
【问题描述】:

一般来说,问题是:我需要创建组均值,在计算均值之前排除自己的组观察。

举个例子:假设我有公司、产品和产品特征。每个公司 (f=1,...,F) 生产几种产品 (i=1,...,I)。我想为公司 f 的产品 i 的某个特征创建一个组均值,使用所有公司的所有产品,不包括公司 f 产品观察。

所以我可以有这样的数据集:

firm prod width
1   1   30
1   2   10
1   3   20
2   1   25
2   2   15
2   4   40
3   2   10
3   4   35

重现表格:

firm=[1,1,1,2,2,2,3,3]
prod=[1,2,3,1,2,4,2,4]
hp=[30,10,20,25,15,40,10,35]
x=[firm' prod' hp']

然后我想估计一个平均值,它将使用所有其他公司的所有产品的价值,即排除所有公司 1 的产品。在这种情况下,我的分组是在公司级别。 (该平均值将用作公司 1 中所有产品宽度的工具变量。)

所以,我应该找到的平均值是:(25+15+40+10+35)/5=25 然后对其他公司重复此过程。

firm prod width mean_desired
1   1   30      25
1   2   10      25
1   3   20      25
2   1   25      
2   2   15
2   4   40
3   2   10
3   4   35

我想我最大的困难是排除自己的坚定价值观。

此问题与此页面相关:Calculating group mean/medians in MATLAB where group ID is in a separate column。但在这里,我们不排除自己的组。

p.s.:如果有人从事经济学工作,只是出于好奇,我实际上是在尝试构建 Hausman 或 BLP 工具。

【问题讨论】:

  • 为了完成,我正在尝试构建一个“循环”解决方案,但我在循环中遇到了“平均所有组,但 i ”的语法问题。有人想尝试循环解决方案吗?

标签: matlab


【解决方案1】:

这是一种避免循环的方法,但可能会占用大量内存。让x 表示您的三列数据矩阵。

m = bsxfun(@ne, x(:,1).', unique(x(:,1))); % or m = ~sparse(x(:,1), 1:size(x,1), true); 
result = m*x(:,3);
result = result./sum(m,2);

这将创建一个零一矩阵m,这样m 的每一行乘以xwidth 列(第二行代码)得出其他组的总和。 m 是通过将xfirm 列中的每个条目与该列(第一行)的唯一值进行比较来构建的。然后,除以其他组的相应计数(第三行)得到所需的结果。

如果您需要按照原始firm 列重复结果,请使用result(x(:,1))

【讨论】:

  • 感谢您的帮助!这很好用!但是,我怎么能创建一个与原始数据大小相同的向量:对于每个观察,我需要有这个“其他组均值”以便稍后运行回归。
  • result(x(:,1)) 是你想要的吗?这是因为firm 列包含整数。我已经编辑了答案
  • 多么棒的简单解决方案!我不知道这种用途。有效。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-09-30
  • 1970-01-01
  • 2020-05-03
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 2017-10-27
  • 1970-01-01
相关资源
最近更新 更多