D-оптимальные проекты

Введение в D-оптимальные проекты

Традиционные экспериментальные проекты (Full Factorial Designs, Fractional Factorial Designs и Response Surface Designs) подходят для калибровки линейных моделей в экспериментальных настройках, где факторы относительно без ограничений в необходимой области. В некоторых случаях, однако, модели обязательно являются нелинейными. В других случаях определенные методы лечения (комбинации уровней факторов) могут быть дорогими или недопустимыми для измерения. D-optimal designs специфичные для модели проекты, которые устраняют эти ограничения традиционных проектов.

D-оптимальный проект сгенерирован итеративным алгоритмом поиска и стремится минимизировать ковариацию оценок параметров для заданной модели. Это эквивалентно максимизации определяющего D = |<reservedrangesplaceholder0>TX |, где X - матрица проекта членов модели (столбцы), рассчитанная при определенных обработках в пространстве проектирования (строки). В отличие от традиционных проектов, D-оптимальные проекты не требуют ортогональных матриц проекта, и в результате оценки параметров могут быть коррелированы. Оценки параметров также могут быть локально, но не глобально, D-оптимальными.

Существует несколько функций Statistics and Machine Learning Toolbox™ для генерации D-оптимальных проектов:

ФункцияОписание
candexch

Использует алгоритм обмена строками, чтобы сгенерировать D-оптимальный проект с заданным количеством запусков для заданной модели и заданного набора кандидатов. Это второй компонент алгоритма, используемого rowexch.

candgen

Генерирует набор кандидатов для заданной модели. Это первый компонент алгоритма, используемого rowexch.

cordexch

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

daugment

Использует алгоритм обмена координатами, чтобы расширить существующий D-оптимальный проект с помощью дополнительных запусков, чтобы оценить дополнительные условия модели.

dcovary

Использует алгоритм координатного обмена, чтобы сгенерировать D-оптимальный проект с фиксированными ковариатными факторами.

rowexch

Использует алгоритм обмена строками, чтобы сгенерировать D-оптимальный проект с заданным количеством запусков для заданной модели. Алгоритм вызывает candgen а затем candexch. (Вызов candexch отдельно для задания набора кандидатов.)

В следующих разделах объясняется, как использовать эти функции для генерации D-оптимальных проектов.

Примечание

Функция rsmdemo генерирует моделируемые данные для экспериментальных настроек, заданных либо пользователем, либо D-оптимальным проектом, сгенерированным cordexch. Он использует rstool интерфейс для визуализации моделей поверхности отклика, соответствующих данным, и он использует nlintool интерфейс для визуализации нелинейной модели, соответствующей данным.

Сгенерируйте D-оптимальные проекты

Два алгоритма Statistics and Machine Learning Toolbox генерируют D-оптимальные проекты:

  • cordexch функция использует алгоритм координатного обмена

  • rowexch функция использует алгоритм обмена строками

Оба cordexch и rowexch использовать итерационные алгоритмы поиска. Они работают путем пошагового изменения начальной матрицы проекта X чтобы увеличить D = |<reservedrangesplaceholder0>TX | на каждом шаге. В обоих алгоритмах существует случайность, встроенная в выбор исходного проекта и в выбор инкрементных изменений. В результате оба алгоритма могут вернуться локально, но не глобально, D-оптимальные проекты. Запустите каждый алгоритм несколько раз и выберите лучший результат для вашего окончательного проекта. Обе функции имеют 'tries' параметр, который автоматизирует это повторение и сравнение.

На каждом шаге алгоритм обмена строками обменивается целой строкой X с строкой из матрицы проекта C оценивается на candidate set допустимых обработок. rowexch функция автоматически генерирует C, подходящую для заданной модели, работая в два шага, вызывая candgen и candexch функции в последовательности. Предоставьте свои C по телефону candexch непосредственно. В любом случае, если C большая, его статическое присутствие в памяти может повлиять на расчеты.

Алгоритм координатного обмена, напротив, не использует набор кандидатов. (Точнее, набор кандидатов является всем пространством проекта.) На каждом шаге алгоритм координат-обмена обменивается одним элементом X с новым элементом, оцениваемым в соседней точке проекта пространства. Отсутствие набора кандидатов уменьшает требования к памяти, но меньшая шкала поиска означает, что алгоритм обмена координатами чаще попадает в локальный минимум, чем алгоритм обмена строками.

Например, предположим, что вы хотите, чтобы проект оценил параметры в следующей трехфакторной, семитермовой модели взаимодействия:

y=β0+β1x+1β2x+2β3x+3β12xx1+2β13xx1+3β23xx2+3ε

Использовать cordexch чтобы сгенерировать D-оптимальный проект с семью запусками:

nfactors = 3;
nruns = 7;
[dCE,X] = cordexch(nfactors,nruns,'interaction','tries',10)
dCE =
    -1     1     1
    -1    -1    -1
     1     1     1
    -1     1    -1
     1    -1     1
     1    -1    -1
    -1    -1     1
X =
     1    -1     1     1    -1    -1     1
     1    -1    -1    -1     1     1     1
     1     1     1     1     1     1     1
     1    -1     1    -1    -1     1    -1
     1     1    -1     1    -1     1    -1
     1     1    -1    -1    -1    -1     1
     1    -1    -1     1     1    -1    -1

Столбцы матрицы проекта X оцениваются ли условия модели в каждой строке проекта dCE. Термины появляются в порядке слева направо:

  1. Постоянный срок

  2. Линейные условия (1, 2, 3)

  3. Условия взаимодействия (12, 13, 23)

Использование X в линейной регрессионной модели, соответствующей данным отклика, измеренным в проектных точках в dCE.

Использовать rowexch подобным образом сгенерировать эквивалентный проект:

[dRE,X] = rowexch(nfactors,nruns,'interaction','tries',10)
dRE =
    -1    -1     1
     1    -1     1
     1    -1    -1
     1     1     1
    -1    -1    -1
    -1     1    -1
    -1     1     1
X =
     1    -1    -1     1     1    -1    -1
     1     1    -1     1    -1     1    -1
     1     1    -1    -1    -1    -1     1
     1     1     1     1     1     1     1
     1    -1    -1    -1     1     1     1
     1    -1     1    -1    -1     1    -1
     1    -1     1     1    -1    -1     1

Увеличение D-оптимальных проектов

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

Например, следующий восьмиступенчатый проект достаточен для оценки основных эффектов в четырехфакторной модели:

dCEmain = cordexch(4,8)
dCEmain =
     1    -1    -1     1
    -1    -1     1     1
    -1     1    -1     1
     1     1     1    -1
     1     1     1     1
    -1     1    -1    -1
     1    -1    -1    -1
    -1    -1     1    -1

Чтобы оценить шесть членов взаимодействия в модели, дополните проект восемью дополнительными запусками:

dCEinteraction = daugment(dCEmain,8,'interaction')
dCEinteraction =
     1    -1    -1     1
    -1    -1     1     1
    -1     1    -1     1
     1     1     1    -1
     1     1     1     1
    -1     1    -1    -1
     1    -1    -1    -1
    -1    -1     1    -1
    -1     1     1     1
    -1    -1    -1    -1
     1    -1     1    -1
     1     1    -1     1
    -1     1     1    -1
     1     1    -1    -1
     1    -1     1     1
     1     1     1    -1

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

The 'start' параметром candexch функция обеспечивает ту же функциональность, что и daugment, но использует алгоритм обмена строками, а не алгоритм обмена координатами.

Задайте фиксированные ковариатные факторы

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

Например, предположим, что вы хотите, чтобы проект оценил параметры в трехфакторной линейной аддитивной модели с восемью запусками, которые обязательно происходят в разное время. Если процесс испытывает временное линейное дрейф, можно хотеть включить время запуска как переменную в модель. Изготовить проект следующим образом:

time = linspace(-1,1,8)';
[dCV,X] = dcovary(3,time,'linear')
dCV =
   -1.0000    1.0000    1.0000   -1.0000
    1.0000   -1.0000   -1.0000   -0.7143
   -1.0000   -1.0000   -1.0000   -0.4286
    1.0000   -1.0000    1.0000   -0.1429
    1.0000    1.0000   -1.0000    0.1429
   -1.0000    1.0000   -1.0000    0.4286
    1.0000    1.0000    1.0000    0.7143
   -1.0000   -1.0000    1.0000    1.0000
X =
    1.0000   -1.0000    1.0000    1.0000   -1.0000
    1.0000    1.0000   -1.0000   -1.0000   -0.7143
    1.0000   -1.0000   -1.0000   -1.0000   -0.4286
    1.0000    1.0000   -1.0000    1.0000   -0.1429
    1.0000    1.0000    1.0000   -1.0000    0.1429
    1.0000   -1.0000    1.0000   -1.0000    0.4286
    1.0000    1.0000    1.0000    1.0000    0.7143
    1.0000   -1.0000   -1.0000    1.0000    1.0000

Область вектора-столбца time является фиксированным фактором, нормированным к значениям между ± 1. Количество строк в фиксированном факторе определяет количество запусков в проекте. Получившийся проект dCV задает настройки фактора для трех управляемых факторов модели в каждый момент времени.

Определение категорийных факторов

Категориальные факторы берут значения в дискретном наборе уровней. Оба cordexch и rowexch иметь 'categorical' параметр, который позволяет вам задать индексы категориальных факторов и 'levels' параметр, который позволяет вам задать количество уровней для каждого фактора.

Например, следующий восьмизначный проект предназначен для линейной аддитивной модели с пятью факторами, в которых конечный коэффициент категориален с тремя уровнями:

dCEcat = cordexch(5,8,'linear','categorical',5,'levels',3)
dCEcat =
    -1    -1     1     1     2
    -1    -1    -1    -1     3
     1     1     1     1     3
     1     1    -1    -1     2
     1    -1    -1     1     3
    -1     1    -1     1     1
    -1     1     1    -1     3
     1    -1     1    -1     1

Задайте наборы кандидатов

Алгоритм обмена строками обменивается строками матрицы начального проекта, X со строками из матрицы проекта, C оценивается на потенциальном наборе допустимых обработок. rowexch функция автоматически генерирует C, подходящую для заданной модели, работая в два шага, вызывая candgen и candexch функции в последовательности. Предоставьте свои C по телефону candexch непосредственно.

Для примера, следующее использует rowexch чтобы сгенерировать пятираундовый проект для двухфакторной чистой квадратичной модели с использованием набора кандидатов, который производится внутри:

dRE1 = rowexch(2,5,'purequadratic','tries',10)
dRE1 =
    -1     1
     0     0
     1    -1
     1     0
     1     1

То же самое можно сделать, используя candgen и candexch последовательно:

[dC,C] = candgen(2,'purequadratic') % Candidate set, C
dC =
    -1    -1
     0    -1
     1    -1
    -1     0
     0     0
     1     0
    -1     1
     0     1
     1     1
C =
     1    -1    -1     1     1
     1     0    -1     0     1
     1     1    -1     1     1
     1    -1     0     1     0
     1     0     0     0     0
     1     1     0     1     0
     1    -1     1     1     1
     1     0     1     0     1
     1     1     1     1     1
treatments = candexch(C,5,'tries',10) % D-opt subset
treatments =
     2
     1
     7
     3
     4
dRE2 = dC(treatments,:) % Display design
dRE2 =
     0    -1
    -1    -1
    -1     1
     1    -1
    -1     0

Можно заменить C в этом примере с матрицей проекта, вычисленной на вашем собственном наборе кандидатов. Например, предположим, что ваш эксперимент ограничен, так что два фактора не могут иметь экстремальные настройки одновременно. Следующее создает ограниченный набор кандидатов:

constraint = sum(abs(dC),2) < 2; % Feasible treatments
my_dC = dC(constraint,:)
my_dC =
     0    -1
    -1     0
     0     0
     1     0
     0     1

Используйте x2fx функция для преобразования набора кандидатов в матрицу проекта:

my_C = x2fx(my_dC,'purequadratic')
my_C =
     1     0    -1     0     1
     1    -1     0     1     0
     1     0     0     0     0
     1     1     0     1     0
     1     0     1     0     1

Найдите необходимый проект так же:

my_treatments = candexch(my_C,5,'tries',10) % D-opt subset
my_treatments =
     2
     4
     5
     1
     3
my_dRE = my_dC(my_treatments,:) % Display design
my_dRE =
    -1     0
     1     0
     0     1
     0    -1
     0     0