0

2 つの法律事務所の支店の市場シェアに関して、2 つの法律事務所間のユークリッド距離を計算しようとしています (今のところ)。

後で、400 の法律事務所のサンプルで 2 つの法律事務所間のすべての可能な距離を計算する必要があります。

簡単に言えば、次のようなデータがあります。

Firm  Year  Location  Market_share
1     2000     1         0.1
1     2000     2         0.2
1     2000     3         0.5
1     2000     4         0.2
1     2001     1         0.3
1     2001     2         0.0
1     2001     3         0.2 
1     2001     4         0.5
2     2000     1         0.0
2     2000     2         0.4
2     2000     3         0.2
2     2000     4         0.4
2     2001     1         0.1
2     2001     2         0.5
2     2001     3         0.3
1     2001     4         0.1

上記のデータは、すべての企業の「バランスの取れた」パネル データになるため、マトリックスのサイズは同じになります。各企業には、約 200 の支店があり、35 年の支店の歴史があります。

このデータを、市場シェアを表すセル値を持つすべての企業 ID の Year X Location 発生マトリックスに変換したいと考えています。

そのような:

会社1

            Location 1 Location 2 Location 3 Location 4 
 2000          0.1        0.2       0.5         0.2 
 2001          0.3        0         0.2         0.5

会社 2

            Location 1 Location 2 Location 3 Location 4 
 2000          0         0.4        0.2        0.4
 2001          0.1       0.5        0.3        0.1

等々...

私がする必要があるのは:

  1. 上記のマトリックスを、最初の列の一意の会社 ID で分割します
  2. ID情報を含む最初の列を削除します
  3. (sparse) コマンドを使用して、残りの行列を Year X Location の発生行列に変換します。
  4. 企業 i と企業 j のすべての可能な組み合わせについて、ユークリッド距離の計算を実行します。

これにどのようにアプローチできますか?

4

1 に答える 1

1

ここで言ったようにデータ表現が必要な場合:

2000 0 0.4 0.2 0.4
2001 0.3 0 0.2 0.5

あなたがすることは次のとおりです。あなたが示し、名前を付けたような行と列の表現を持つデータマトリックス表現があるとしますoldRepresentation(つまり、行は観察であり、列は会社、年の場所、市場シェアです)。会社ごとに 1 つの新しい表現があり、一意の年ごとに三日月の順序で 1 つの行があり、場所の 1 つの列があります。スパース表現である場合とそうでない場合があります。ここで示したケースではなく、マトリックスがスパースである場合にのみスパース表現を使用します。

これは表現を変更するためのスクリプトですが、スタックオーバーフローはこの方法では機能しないことに注意してください。自分でコーディングし、コーディングの問題と行き詰まっている場所を私たちに提出する必要があります。あなたは初心者だとおっしゃっていたので、matlab 構文を使用して学習するためのアイデアを次に示します。必要なユークリッド距離として、それを使用して他のポイントをワークアウトします。質問はできるだけ一般的なものにするようにしてください。

oldRepresentation = [...
...% Firm  Year  Location  Market_share
      1     2000     1         0.1;...
      1     2000     2         0.2;...
      1     2000     3         0.5;...
      1     2000     4         0.2;...
      1     2001     1         0.3;...
      1     2001     2         0.0;...
      1     2001     3         0.2;...
      1     2001     4         0.5;...
      2     2000     1         0.0;...
      2     2000     2         0.4;...
      2     2000     3         0.2;...
      2     2000     4         0.4;...
      2     2001     1         0.1;...
      2     2001     2         0.5;...
      2     2001     3         0.3;...
      1     2001     4         0.1];

% Firm information (if you know these information a priori, you can
% set them directly):
firmsNumbers = unique(oldRepresentation(:,1))'; % Get unique firm
% numbers (suppose you have a firma that doesnt have a representation,
% in this case you will jump it.
nFirms = numel(firmsNumbers); % Total number of firms

% Year information:
years = unique(oldRepresentation(:,2))'; % Get unique years
nYears = numel(years); % Total number of years:

% Location information:
location = unique(oldRepresentation(:,3))'; % Unique locations
nLocations = max(oldRepresentation(:,3)); % Total number of locations

newRepresentation = cell(1,nFirms); % Pre allocate holder for the new
% representation, one cell for each firma, sparse representation.
nonSparse = cell(1,nFirms); % Pre allocate holder for the new
% representation, one cell for each firma, non sparse representation.

for curFirm=firmsNumbers % Loop on the firms
  firmLines=(oldRepresentation(:,1)==curFirm); % get lines which the

  % firm appears
  yearsOfOperation=oldRepresentation(firmLines,2); % get current firm
  % operation years
  % Transform the years to line indexes:
  [~,lineIdx] = ismember(yearsOfOperation,years);
  firmLocations=oldRepresentation(firmLines,3); % get current firm
  % operation locations
  newRepresentation{curFirm} = sparse(nYears,nLocations); % One line
  % for each year, one column for each location (sparse matrix
  % allocation).
  nonSparse{curFirm} = zeros(nYears,nLocations);
  marketShares=oldRepresentation(firmLines,4);
  % Now we fill this firm market share:
  for k=1:numel(yearsOfOperation)
    newRepresentation{curFirm}(lineIdx(k),firmLocations(k)) = ...
      marketShares(k);
    nonSparse{curFirm}(lineIdx(k),firmLocations(k)) = ...
      marketShares(k);
  end
end

結果の非スパース表現:

>> nonSparse{1} % First firma, first line is the 2000 year, each column a location from 1 to 4.

ans =

    0.1000    0.2000    0.5000    0.2000
    0.3000         0    0.2000    0.1000

>> nonSparse{2} % Second firma

ans =

         0    0.4000    0.2000    0.4000
    0.1000    0.5000    0.3000         0

スパース表現:

>> newRepresentation{1} % First firm

ans =

   (1,1)       0.1000
   (2,1)       0.3000
   (1,2)       0.2000
   (1,3)       0.5000
   (2,3)       0.2000
   (1,4)       0.2000
   (2,4)       0.1000

>> newRepresentation{2} % Second firm

ans =

   (2,1)       0.1000
   (1,2)       0.4000
   (2,2)       0.5000
   (1,3)       0.2000
   (2,3)       0.3000
   (1,4)       0.4000
于 2013-08-18T21:22:22.673 に答える