我有一個叫做'simulatedReturnsEVT3'的3維向量。在該向量中,我想要替換所有高於「MaxAcceptableVal」或低於「MinAcceptableVal」的值。這些超出這兩個閾值之一的值應該由從三維向量'data2'中繪製的隨機數來替換。爲了繪製該隨機數,我使用matlab函數'datasample'。如何用給定數據集中的隨機數取代超過閾值的值?
我已經寫了下面的代碼,它用從'data2'採樣的隨機數替換超出任一閾值的值。然而,看起來(當在直方圖中繪製數據時)替換髮生在沿着維度'j'的相同值上。這不是我想要做的。對於每個閾值超標,我想要一個新的隨機數字來從'data2'中進行替換。
nIndices = 19
nTrials = 10000
% data2 has dimensions 782 x 19 x 10000
% simulatedReturnsEVT3 has dimensions 312 x 19 x 10000
% MaxAcceptableVal has dimensions 1 x 19
% MinAcceptableVal has dimensions 1 x 19
% Cut off Outliers
for i=1:nIndices
for j=1:nTrials
sliceEVT = simulatedReturnsEVT3(:,i,j);
sliceEVT(sliceEVT < MinAcceptableVal(i))=datasample (data2(:,i,j), 1,1,'Replace',false);
sliceEVT(sliceEVT > MaxAcceptableVal(i))=datasample (data2(:,i,j), 1,1,'Replace',false);
simulatedReturnsEVT3(:,i,j) = sliceEVT;
end
end
通過創建下列矩陣可以在較小的範圍內說明同樣的問題。
% Set Maximum Acceptable Levels for Positive and Negative Returns
MaxAcceptableVal = [0.5 0.3]
MinAcceptableVal = [-0.5 -0.3]
simulatedReturnsEVT3 = [0.6 0.3; 0.3 0.3; 0.3 0.3; 0.3 0.4]
simulatedReturnsEVT3 = repmat(simulatedReturnsEVT3,[1 1 2])
data2 = [0.25 0.15; 0.25 0.15; 0.2 0.1]
data2 = repmat(data2,[1 1 2])
% Cut off Outliers
for i=1:2
for j=1:2
sliceEVT = simulatedReturnsEVT3(:,i,j);
sliceEVT(sliceEVT < MinAcceptableVal(i))=datasample (data2(:,i,j), 1,1,'Replace',false);
sliceEVT(sliceEVT > MaxAcceptableVal(i))=datasample (data2(:,i,j), 1,1,'Replace',false);
simulatedReturnsEVT3(:,i,j) = sliceEVT;
end
end
任何人都可以幫忙嗎?
非常感謝您的詳細回覆il_raffa。我相信你已經用datasample函數正確地識別了我的問題。但是,將代碼應用到我的數據集時,它仍會產生相同的問題。我現在決定繼續我的分析,並將離開這一步。再次感謝! – Carolin