MATLAB — прошлые отклонения

#matplotlib

#matplotlib

Вопрос:

У меня есть таблица, которая выглядит следующим образом:

 firm id     year      profit
1           2000      10
1           2001      20
1           2002      15
2           1999      40
2           2000      55
2           2001      35
2           2002      65
3           2001      5
3           2002      20
3           2003      10
 

И я хочу оценить размер прибыли фирмы за последние годы.

Ответ №1:

Предполагая, что ваша таблица уже отсортирована по «Идентификатору фирмы» и по «Году», и что для каждого года есть только одна запись, вы можете перебирать каждую фирму:

 profitVar = [];
ids = unique(yourTable.firmId); % id of each firm

% Loop through the firms
for i = 1:length(ids) 
    id = ids(i);
    subData = find(yourTable.firmId == id); % get the data from the given firm only

    % Loop through the years
    for j = 1:length(subData)
        profitVar = [profitVar; var(yourTable.profit(subData(1:j-1)))];
    end

end
yourTable = addvars(yourTable, profitVar);
 

Обратите внимание, что это возвращает NaN только за первый год, а не за второй год из-за того, что он вычисляет дисперсию предыдущего (которая, таким образом, всегда будет равна нулю). Если это проблема, вы можете просто вставить исключение во внутренний цикл, что-то вроде if (j == 2) profitVar = [profitVar; NaN]; .

Комментарии:

1. Спасибо, Маттео!

2. Если этот ответ сработал для вас, пожалуйста, примите его; наоборот, если чего-то не хватает, дайте мне знать.