2015-11-09 5 views
-1

У меня есть переменная age, которая содержит возраст 100 пациентов (в возрасте от 20 до 80 лет).matlab случайный образец переменной x раз, чтобы получить среднее значение y

Я хотел бы написать код для случайного выбора 10 пациентов из этой выборки из 100 пациентов (один пациент может оказаться больше, чем один раз), чтобы получить средний возраст 45

Кто-нибудь знает, как я могу добиться этого ?

+1

[ 'randsample'] (http://www.mathworks.com/help/stats/randsample.html), если у вас есть набор инструментов статистики. Или просто сгенерируйте [случайные целые числа] (http://www.mathworks.com/help/matlab/math/random-integers.html) для индексации. – excaza

+1

Мы не можем здесь написать свой код. Сначала попробуйте что-то, и если вы застряли в попытке, задайте вопрос, который включает в себя [mcve] подробную информацию о коде, с которым вы столкнулись. – Adriaan

ответ

0

Я изначально хотел понять, есть ли функция в Matlab, которая может быть использована для решения этой проблемы. Тем не менее, ни одна из команд, относящихся к rand, кажется, делает то, что мне нужно, чтобы сделать (мои извинения, если я пропустил это).

Однако, я написал следующий код, который, кажется, исправить мою проблему. В цикле я допускаю 0,1 отклонения от желаемого среднего значения (которое может быть адаптировано по мере необходимости).

% Make an array of 100 ages between 20 and 80 
min=20; 
max=80; 
AgeArray = min + (max-min).*rand(100,1); 

% Set parameters for randomselection 
samplenr=10;    % Want a 10 random samples from the original age array of 100 
mean = 45;    % The mean of randomly selected 10 sample should be 45 
half_nr=samplenr/2;  % Set the half-way point 

% Get first random sample of 10 ages from the original array of 100 
RandSubSample = datasample(AgeArray,samplenr); 

% Sort the array of 10 from low to high values 
RandSubSample=sort(RandSubSample); 

% Mean of this random sample 
sumage=sum(RandSubSample); 
meanage=sumage/samplenr; 



% Loop to re-select 10 samples until mean matches 45 (with error allowed for +/- 
% 0.1 
while meanage<mean-0.1 || meanage>mean+0.1 

if meanage<mean     % If mean is too low we need to replace young ages with older aged 

    index=randi([1 half_nr]); 
    RandSubSample(index)=r(randi(numel(r))); 

elseif meanage>mean    % If mean is too high we need to replace old age with younger age 

    index=randi([half_nr nr]); 
    RandSubSample(index)=r(randi(numel(r))); 

end 

RandSubSample=sort(RandSubSample); 

sumage=sum(RandSubSample); 
meanage=sumage/nr; 

end 
y=sort(y); 

sumage=sum(y); 
meanage=sumage/nr; 

end