2017-10-21 57 views
1

通常,問題是:我需要創建組意味着在計算均值之前排除自己的組觀察。計算組意味着自己的組排除在MATLAB中

舉一個例子:假設我有公司,產品和產品特徵。每家公司(f = 1,...,F)生產多種產品(i = 1,...,I)。我想創建一個產品的某個特性的組合平均值i公司f,使用所有公司的所有產品,不包括公司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工具。

+0

完成,我想構建一個「循環」 - 溶液,但我有語法的「平均所有羣體麻煩但_i_「在循環中。有沒有人想嘗試一個循環解決方案? – cla4study

回答

0

這是一種避免循環的方式,但可能會耗費內存。假設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使得乘以的x寬度柱(的代碼的第二行)的各m行給出其它基團的總和。 m通過將公司列的x中的每個條目與該列的唯一值(第一行)進行比較而構建。然後,除以其他組的相應計數(第三行)給出期望的結果。

如果你需要反覆按原來firm列的效果,請使用result(x(:,1))

+0

謝謝你的幫助!這很好用!但是,我怎樣才能創建一個與原始數據大小相同的矢量:對於每個觀察,我需要讓這個「其他組的意思」稍後運行迴歸。 – cla4study

+0

'result(x(:,1))'你想要什麼?這是因爲「公司」列包含整數。我已經編輯了答案 –

+1

多麼奇妙的簡單解決方案!我不知道這種類型的用途。有效。謝謝! – cla4study