random

Класс: LinearMixedModel

Сгенерируйте случайные отклики из подобранной линейной модели смешанных эффектов

Описание

пример

ysim = random(lme) возвращает вектор симулированных откликов ysim из установленной линейной модели смешанных эффектов lme в исходных точках проекта фиксированных и случайных эффектов, используемых для подгонки lme.

random симулирует новый вектор случайных эффектов и новые ошибки наблюдения. Итак, симулированный отклик

ysim=Xβ^+Zb^+ε,

где β^ - предполагаемые коэффициенты фиксированных эффектов, b^ является новыми случайными эффектами, и ε является новой ошибкой наблюдения.

random также учитывает эффект весов наблюдений, если вы используете любой при подгонке модели.

пример

ysim = random(lme,tblnew) возвращает вектор симулированных откликов ysim из установленной линейной модели смешанных эффектов lme в значениях в новой таблице или массиве набора данных tblnew. Используйте таблицу или массив набора данных для random если для подбора кривой модели используется таблица или массив набора данных lme.

ysim = random(lme,Xnew,Znew) возвращает вектор симулированных откликов ysim из установленной линейной модели смешанных эффектов lme от значений в новых матрицах проекта фиксированных и случайных эффектов, Xnew и Znew, соответственно. Znew может также быть массивом ячеек из матриц. Используйте матричный формат для random если вы используете матрицы проекта для подбора кривой модели lme.

пример

ysim = random(lme,Xnew,Znew,Gnew) возвращает вектор симулированных откликов ysim из установленной линейной модели смешанных эффектов lme от значений в новых матрицах проекта фиксированных и случайных эффектов, Xnew и Znew, соответственно, и сгруппированная переменная Gnew.

Znew и Gnew могут также быть массивами ячеек матриц и сгруппированных переменных, соответственно.

Входные параметры

расширить все

Линейная модель смешанных эффектов, заданная как LinearMixedModel объект, созданный с использованием fitlme или fitlmematrix.

Новые входные данные, которые включают переменную отклика, переменные предиктора и сгруппированные переменные, заданные как таблица или массив набора данных. Переменные предиктора могут быть непрерывными или сгруппированные переменные. tblnew должны иметь те же переменные, что и в исходной таблице или массиве набора данных, используемом для соответствия линейной модели смешанных эффектов lme.

Новая матрица разработки фиксированных эффектов, заданная как n матрица -by p, где n - количество наблюдений, а p - количество переменных фиксированного предиктора. Каждая строка X соответствует одному наблюдению и каждому столбцу X соответствует одной переменной.

Типы данных: single | double

Новый дизайн случайных эффектов, заданный как n матрица q -by - или массив ячеек R матриц проекта Z{r}, где r = 1, 2,..., R. Если Znew - массив ячеек, затем каждый Z{r} является n -by- q (r) матрицей, где n - количество наблюдений, а q (r) - количество случайных переменных предиктора.

Типы данных: single | double | cell

Новые сгруппированные переменные или переменные, заданные в виде вектора или массива ячеек, R длины сгруппированных переменных, используемые для соответствия модели линейных смешанных эффектов, lme.

random рассматривает все уровни каждой сгруппированной переменной как новые уровни. Он рисует независимый вектор случайных эффектов для каждого уровня каждой сгруппированной переменной.

Типы данных: single | double | categorical | logical | char | string | cell

Выходные аргументы

расширить все

Симулированные отклики, возвращенные как n-на-1 вектор, где n - количество наблюдений.

Примеры

расширить все

Загрузите выборочные данные.

load('fertilizer.mat');

Массив набора данных включает данные эксперимента по разделению графика, где грунт разделяется на три блока на основе типа грунта: песчаный, илистый и суглинистый. Каждый блок разделен на пять графиков, где пять различных типов помидоров (вишня, семейная реликвия, виноград, виноградная лоза и слива) случайным образом назначены на эти графики. Томатные растения на графиках затем делятся на подграфики, где каждый подграфик обрабатывается одним из четырех удобрений. Это моделируемые данные.

Сохраните данные в массиве набора данных под названием ds, в практических целях и определить Tomato, Soil, и Fertilizer как категориальные переменные.

ds = fertilizer;
ds.Tomato = nominal(ds.Tomato);
ds.Soil = nominal(ds.Soil);
ds.Fertilizer = nominal(ds.Fertilizer);

Подбор линейной модели смешанных эффектов, где Fertilizer и Tomato являются переменными фиксированных эффектов, и среднее выражение изменяется в зависимости от блока (тип почвы), и графики внутри блоков (типы томатов в пределах типов почвы) независимо.

lme = fitlme(ds,'Yield ~ Fertilizer * Tomato + (1|Soil) + (1|Soil:Tomato)');

Сгенерируйте случайные значения отклика в исходных проектных точках. Отобразите первые пять значений.

rng(123,'twister') % For reproducibility
ysim = random(lme);
ysim(1:5)
ans = 5×1

  114.8785
  134.2018
  154.2818
  169.7554
   84.6089

Загрузите выборочные данные.

load carsmall

Подбор линейной модели смешанных эффектов с фиксированными эффектами для Weightи случайная точка пересечения, сгруппированный по Model_Year. Сначала сохраните данные в таблице.

tbl = table(MPG,Weight,Model_Year);
lme = fitlme(tbl,'MPG ~ Weight + (1|Model_Year)');

Случайным образом сгенерируйте ответы, используя исходные данные.

rng(123,'twister') % For reproducibility
ysim = random(lme,tbl);

Постройте график оригинала и случайным образом сгенерированных откликов, чтобы увидеть, как они отличаются. Сгруппировать их по модельным годам.

figure()
gscatter(Weight,MPG,Model_Year)
hold on
gscatter(Weight,ysim,Model_Year,[],'o+x')
legend('70-data','76-data','82-data','70-sim','76-sim','82-sim')
hold off

Figure contains an axes. The axes contains 6 objects of type line. These objects represent 70-data, 76-data, 82-data, 70-sim, 76-sim, 82-sim.

Обратите внимание, что моделируемые значения случайного отклика для 82 года ниже, чем исходные данные для этого года. Это может быть связано с более низким моделируемым случайным эффектом для 82 года, чем предполагаемый случайный эффект в исходных данных.

Загрузите выборочные данные.

load('fertilizer.mat');

Массив набора данных включает данные эксперимента по разделению графика, где грунт разделяется на три блока на основе типа грунта: песчаный, илистый и суглинистый. Каждый блок разделен на пять графиков, где пять различных типов помидоров (вишня, семейная реликвия, виноград, виноградная лоза и слива) случайным образом назначены на эти графики. Томатные растения на графиках затем делятся на подграфики, где каждый подграфик обрабатывается одним из четырех удобрений. Это моделируемые данные.

Сохраните данные в массиве набора данных под названием ds, в практических целях и определить Tomato, Soil, и Fertilizer как категориальные переменные.

ds = fertilizer;
ds.Tomato = nominal(ds.Tomato);
ds.Soil = nominal(ds.Soil);
ds.Fertilizer = nominal(ds.Fertilizer);

Подбор линейной модели смешанных эффектов, где Fertilizer и Tomato являются переменными фиксированных эффектов, и среднее выражение изменяется в зависимости от блока (тип почвы), и графики внутри блоков (типы томатов в пределах типов почвы) независимо.

lme = fitlme(ds,'Yield ~ Fertilizer * Tomato + (1|Soil) + (1|Soil:Tomato)');

Создайте новый массив набора данных с проектными значениями. Новый массив набора данных должен иметь те же переменные, что и исходный массив набора данных, который вы используете для подбора кривой модели lme.

dsnew = dataset();
dsnew.Soil = nominal({'Sandy';'Silty';'Silty'});
dsnew.Tomato = nominal({'Cherry';'Vine';'Plum'});
dsnew.Fertilizer = nominal([2;2;4]);

Сгенерируйте случайные отклики в новых точках.

rng(123,'twister') % For reproducibility
ysim = random(lme,dsnew)
ysim = 3×1

   99.6006
  101.9911
  161.4026

Загрузите выборочные данные.

load carbig

Подгонка линейной модели смешанных эффектов для миль на галлон (MPG) с фиксированными эффектами для ускорения, лошадиной силы и цилиндров и потенциально коррелированным случайным эффектом для точки пересечения и ускорения, сгруппированным по модельному году.

Сначала подготовьте матрицы проекта для подбора кривой линейной модели смешанных эффектов.

X = [ones(406,1) Acceleration Horsepower];
Z = [ones(406,1) Acceleration];
Model_Year = nominal(Model_Year);
G = Model_Year;

Теперь подбирайте модель используя fitlmematrix с определенными матрицами проекта и сгруппированными переменными.

lme = fitlmematrix(X,MPG,Z,G,'FixedEffectPredictors',....
{'Intercept','Acceleration','Horsepower'},'RandomEffectPredictors',...
{{'Intercept','Acceleration'}},'RandomEffectGroups',{'Model_Year'});

Создайте матрицы проекта, которые содержат данные, при которых можно предсказать значения отклика. Xnew должно иметь три столбца, как в X. Первый столбец должен быть столбцом 1с. А значения в последних двух столбцах должны соответствовать Acceleration и Horsepower, соответственно. Первый столбец Znew должен быть столбцом 1с, а второй столбец должен содержать то же Acceleration значения как в Xnew. Исходная сгруппированная переменная в G является модельным годом. Итак, Gnew должны содержать значения для модельного года. Обратите внимание, что Gnew должны содержать номинальные значения.

Xnew = [1,13.5,185; 1,17,205; 1,21.2,193];
Znew = [1,13.5; 1,17; 1,21.2];
Gnew = nominal([73 77 82]);

Сгенерируйте случайные отклики для данных в новых матрицах проекта.

rng(123,'twister') % For reproducibility
ysim = random(lme,Xnew,Znew,Gnew)
ysim = 3×1

   15.7416
   10.6085
    6.8796

Теперь повторите то же самое для линейной модели смешанных эффектов с некоррелированными терминами случайных эффектов для точки пересечения и ускорения. Во-первых, измените проект исходных случайных эффектов и сгруппированные переменные случайных эффектов. Затем подгоняйте модель.

Z = {ones(406,1),Acceleration};
G = {Model_Year,Model_Year};

lme = fitlmematrix(X,MPG,Z,G,'FixedEffectPredictors',....
{'Intercept','Acceleration','Horsepower'},'RandomEffectPredictors',...
{{'Intercept'},{'Acceleration'}},'RandomEffectGroups',{'Model_Year','Model_Year'});

Теперь воссоздайте новый проект случайных эффектов, Znew, и проект сгруппированной переменной, Gnew, с помощью которого можно предсказать значения отклика.

Znew = {[1;1;1],[13.5;17;21.2]};
MY = nominal([73 77 82]);
Gnew = {MY,MY};

Сгенерируйте случайные отклики, используя новые матрицы проекта.

rng(123,'twister') % For reproducibility
ysim = random(lme,Xnew,Znew,Gnew)
ysim = 3×1

   16.8280
   10.4375
    4.1027