[Эта статья была впервые опубликована на R в Лаборатории и любезно предоставлена R-блогерами]. (Вы можете сообщить о проблеме с содержанием на этой странице здесь)
Хотите поделиться своим контентом с R-блогерами? нажмите здесь, если у вас есть блог, или здесь, если у вас его нет.
Некоторые основные понятия о фракционных планах эксперимента, а также их генерации и анализе в R.
При прочих равных условиях самое простое объяснение обычно является наиболее вероятным.
Весь код и данные в этом посте доступны на GitHub: Дробные планы с R.
Это планы, в которых часть или часть обработок полного факторного плана выбраны надлежащим образом с целью определения какие из факторов являются значимыми при меньшем числе прогонов эксперимента. Под полным факторным планом я подразумеваю план k-фактора с двумя уровнями на каждом (2 k ).
Дробные планы позволяют оценить большое количество факторов и выявить те из них, которые действительно влияют на нашу переменную (переменные) отклика.
Основным недостатком этого подхода является то, что мы называем псевдонимами эффектов , которые представляют собой два или более эффектов с разными именами, которые в основном оценивают один и тот же эффект. Например, в результатах дробного плана может быть трудно провести различие между влиянием фактора A и влиянием взаимодействия факторов C , D и E (продукт CDE ). . Эта проблема может быть уменьшена, если мы тщательно выберем расчетную долю и проведем надлежащий анализ данных.
Принцип иерархии
Эффекты низшего порядка, в основном эффекты отдельных факторов и взаимодействия между двумя факторами, с большей вероятностью будут важными или активными, чем эффекты более высокого порядка. Эффекты одного порядка с равной вероятностью будут активны.
Принцип редкости
Ожидается, что из общего числа эффектов, которые можно изучить в эксперименте, только незначительная часть, от 20 до 30%, будет активной.
Принцип наследования
Чтобы эффект взаимодействия был активным, по крайней мере один из основных эффектов составляющих его факторов должен быть значительным.
Генератор дробей
Эффект, контраст которого используется для создания факториальной дроби. Этот эффект невозможно оценить. Например, если мы хотим оценить влияние четырех факторов A , B , C и D с дробным планом, мы можем использовать генератор I = ABCD , что позволит нам определить D = ABC , то есть мы сможем установить различные уровни D путем умножения столбцов
Также важно отметить, что в зависимости от нашей конструкции может быть несколько генераторов.
Теперь рассмотрим пример анализа результатов дробного плана. В этом случае был проведен эксперимент по определению существенных факторов, влияющих на выход химического процесса.
Учитывались следующие факторы:
yield_factors <- read.csv("data/yield_factors.csv") colnames(yield_factors) <- c("Фактор", "-1", "+1") yield_factors ## Фактор -1 +1 ## 1 Скорость подачи (л/мин) 10 15 ## 2 Катализатор (%) 1 2 ## 3 Скорость перемешивания (об/мин) 100 120 ## 4 Температура (\xb0C) 140 180 ## 5 Концентрация (%) 3 6
Результаты эксперимента также можно найти в папке данных:
yield_data <- read.csv("data/yield_data.csv") голова (урожай_данные) ## Скорость подачи Катализатор Скорость перемешивания Температура Концентрация Выход ## 1 -1 -1 -1 -1 1 56 ## 2 1 -1 -1 -1 -1 53 ## 3 -1 1 -1 -1 -1 63 ## 4 1 1 -1 -1 1 65 ## 5 -1 -1 1 -1 -1 53 ## 6 1 -1 1 -1 1 55 92, данные = данные_дохода) ## ## Остатки: ## ВСЕ 16 остатков равны 0: никаких остаточных степеней свободы! ## ## Коэффициенты: ## Оценить стандарт. Значение ошибки t Pr(>
|t|) ## (перехват) 6.525e+01 NaN NaN NaN ## FeedRate -1.000e+00 NaN NaN NaN ## Катализатор 1.025e+01 NaN NaN NaN ## Скорость перемешивания 1.544e-16 NaN NaN NaN ## Температура 6.125e+00 NaN NaN NaN ## Концентрация -3,125e+00 NaN NaN NaN ## FeedRate:Catalyst 7.500e-01 NaN NaN NaN ## FeedRate:AgitationSpeed 2.500e-01 NaN NaN NaN ## FeedRate:Temperature -3.750e-01 NaN NaN NaN ## FeedRate:Концентрация 6.250e-01 NaN NaN NaN ## Катализатор:AgitationSpeed 7.500e-01 NaN NaN NaN ## Катализатор: температура 5.375e+00 NaN NaN NaN ## Катализатор: Концентрация 6.250e-01 NaN NaN NaN ## Скорость перемешивания: температура 1. 250e-01 NaN NaN NaN ## Скорость перемешивания: Концентрация 1.125e+00 NaN NaN NaN ## Температура: Концентрация -4,750e+00 NaN NaN NaN ## ## Остаточная стандартная ошибка: NaN при 0 степенях свободы ## Множественный R-квадрат: 1, скорректированный R-квадрат: NaN ## F-статистика: NaN для 15 и 0 DF, p-значение: NA
Обратите внимание, что при 16 экспериментальных запусках можно рассчитать только 16 эффектов, включая пересечение. Поскольку у нас нет дополнительной информации, невозможно рассчитать стандартную ошибку, t-значения и p-значения.
Псевдонимы эффектов
Пакет FrF2
включает функцию, которая покажет нам структуру псевдонимов эффектов, только если эта структура включает псевдонимы между основными эффектами или двухфакторными взаимодействиями. Поскольку схема в этом примере имеет разрешение V, нам не о чем беспокоиться о структуре псевдонимов, а
функция не покажет никаких результатов:
aliases(yield_lm) ## [1] в модели нет алиасинга
С помощью вышеизложенного мы можем напрямую установить, какие эффекты являются наиболее значимыми.
Графический анализ (Daniel Plot)
Как определить, какие эффекты являются значительными? Первый подход может быть сделан с графиком Дэниела, который можно сделать с помощью функции DanielPlot()
, включенной в пакет FrF2
:
DanielPlot(yield_lm)
Это было легко. Этот график показывает нам простым способом, какие основные эффекты и двухфакторные взаимодействия имеют значение при допущении, что незначительные эффекты подчиняются нормальному распределению.
Графический анализ (диаграмма Парето)
Приведенный выше график можно дополнить диаграммой Парето. Для этого мы можем использовать пакет ggplot2
, взяв модель эффекты:
библиотека (ggplot2) yield_coeffs <- коэффициенты(yield_lm)[-1] # Отбрасываем перехват yield_effects <- data.frame( Эффект = имена (доход_коэффициент), Значение = без имени (доход_коэффициент), Абсолютное значение = абс (неназвание (коэфф_дохода)), Знак = as.character(unname(sign(yield_coeffs))) ) ggplot(yield_effects, aes(AbsoluteValue, reorder(Effect, -AbsoluteValue, abs))) + geom_col(aes(заполнить = Знак)) + xlab("Величина эффекта") + ylab("Эффект") + тема_минимальный()
Из этого мы можем сделать вывод, что наиболее важными эффектами были процентное содержание катализатора, температура и концентрация реагента, а также двойное взаимодействие между катализатором и температурой и между температурой и концентрацией.
Последующий анализ с помощью ANOVA
Теперь, когда мы знаем, какие факторы оказывают существенное влияние на урожайность, мы можем выполнить обычный дисперсионный анализ, учитывая только эти:
анова (выход_lm2)
## Таблица дисперсионного анализа
##
## Ответ: доходность
## Df Сумма Sq Среднее значение Sq F Pr(>F)
## Катализатор 1 1681.00 1681.00 213.4603 4.725e-07 ***
## Температура 1 600.25 600.25 76.2222 2.316e-05 ***
## Концентрация 1 156,25 156,25 190,8413 0,002127 **
## Катализатор: Температура 1 462,25 462,25 58,6984 5,953e-05 ***
## Катализатор: Концентрация 1 6,25 6,25 0,7937 0,398998
## Температура:Концентрация 1 361,00 361,00 45,8413 0,000142 ***
## Катализатор:Температура:Концентрация 1 1,00 1,00 0,1270 0,730795
## Остатки 8 63,00 7,88
## ---
## Значение.
Теперь давайте рассмотрим пример с большим количеством факторов. В данном случае наша цель — разработать краску с превосходной яркостью, поэтому мы проконсультировались со специалистами по краскам и определили восемь факторов, которые могут влиять на яркость. Поскольку полный эксперимент с восемью факторами будет состоять из 256 экспериментальных прогонов, мы решили провести фракцию, в частности план 2
Первый шаг — импорт данных в R:
paint_data <- read.csv("data/paint_data.csv") голова (paint_data) ## A B C D E F G H Яркость ## 1 -1 -1 -1 -1 -1 -1 -1 -1 53 ## 2 1 -1 -1 -1 1 1 1 -1 60 ## 3 -1 1 -1 -1 1 1 -1 1 68 ## 4 1 1 -1 -1 -1 -1 1 1 78 ## 5 -1 -1 1 -1 1 -1 1 1 48 ## 6 1 -1 1 -1 -1 1 -1 1 67
Подгонка линейной модели
Далее подгоняем линейную модель с учетом основных эффектов и двухфакторных взаимодействий:
paint_lm <- lm(Brightness ~ ( .2, данные = данные_окраски)
Эффекты псевдонима
В отличие от предыдущего примера, в этом дизайне функция aliases()
покажет нам структуру псевдонима, где мы можем видеть, что взаимодействия между двумя факторами связаны друг с другом:
aliases(paint_lm) ## ## A:B = C:E = D:F = G:H ## A:C = B:E = D:G = F:H ## A:D = B:F = C:G = E:H ## A:E = B:C = D:H = F:G ## A:F = B:D = C:H = E:G ## A:G = B:H = C:D = E:F ## A:H = B:G = C:F = D:E
Если несколько факторов окажутся значимыми, будет несколько сложно провести различие между различными взаимодействиями. Но принимая во внимание принципы иерархии, разреженности и наследования, у нас есть некоторая уверенность, что лишь немногие эффекты будут действительно значимыми.
Графический анализ (Daniel Plot)
Как и в предыдущем примере, мы построили график Daniel с использованием линейной модели на данных яркости:
DanielPlot(paint_lm)
Ничего себе, только два эффекта из восьми, которые мы рассмотрели оказалось значительным.
Графический анализ (диаграмма Парето)
Дополним вышесказанное диаграммой Парето:
paint_coeffs <- коэффициенты(paint_lm)[-1] # Отбрасываем перехват paint_coeffs <- paint_coeffs[!is.na(paint_coeffs)] # Отменить эффекты NA paint_effects <- data.frame( Эффект = имена (paint_coeffs), Значение = без имени (paint_coeffs), Абсолютное значение = абс (неназвание (коэфф_краски)), Знак = as.character(unname(sign(paint_coeffs))) ) ggplot(paint_effects, aes(AbsoluteValue, reorder(Effect, -AbsoluteValue, abs))) + geom_col(aes(заполнить = Знак)) + xlab("Величина эффекта") + ylab("Эффект") + тема_минимальный()
Принимая во внимание этот график, может быть важно учитывать фактор G, так как его негативное влияние на яркость, хотя и небольшое по сравнению с A и B, может доставить нам некоторые проблемы.
Последующий анализ с помощью ANOVA
Теперь давайте проведем дисперсионный анализ, учитывая только факторы A, B и G:
paint_lm2 <- lm(Яркость ~ A*B*G, данные = paint_data) анова (paint_lm2) ## Таблица дисперсионного анализа ## ## Ответ: яркость ## Df Сумма Sq Среднее значение Sq F Pr(>F) ## А 1 1105,56 1105,56 102,2486 7.812e-06 *** ## Б 1 637,56 637,56 58,9653 5.857э-05*** ## G 1 52,56 52,56 4,8613 0,05855 . ## А:В 1 3,06 3,06 0,2832 0,60905 ## A:G 1 27,56 27,56 2,5491 0,14902 ## Б:Г 1 0,56 0,56 0,0520 0,82530 ## A:B:G 1 14,06 14,06 1,3006 0,28710 ## Остаток 8 86,50 10,81 ## --- ## Значение. коды: 0 '***' 0,001 '**' 0,01 '*' 0,05 '.' 0.1 ' ' 1
Как мы и думали, учесть G-фактор было неплохой идеей. Хотя его влияние не было значительным при отсечке 0,05, с практической точки зрения его влияние могло быть нежелательным.
Кубический график
Среди всех наших обработок (комбинаций A, B и G) мы можем выбрать ту, которая дает наилучшую яркость. Это можно сделать графически с помощью кубического графика. Функция cubePlot()
также включена в пакет FrF2
:
cubePlot(paint_lm2, eff1 = "A", eff2 = "B", eff3 = "G")
Этот график ясно показывает, что сочетание A положительного с B положительным даст наилучшую яркость. Что касается фактора G, то достаточно будет установить его значение таким, которое наиболее удобно для нас в практическом плане, так как его влияние представляется минимальным при положительных уровнях А и В.
В зависимости от вашей цели, после того как мы определим значимые факторы для переменной отклика, следующим шагом может быть перемещение экспериментальной области на уровни, которые усиливают отклик, и в идеале запустить дизайн поверхности отклика, чтобы найти оптимальное сочетание факторов.
Также может случиться так, что результаты, полученные при частичном плане, недостаточны для дифференциации основных эффектов или взаимодействий двух факторов. В этом случае необходимо было бы запустить дополнительную фракцию, которая позволила бы нам это выяснить.
Я рассмотрю обе идеи в следующих постах, большое спасибо за посещение этого сайта!
Если вы хотите углубиться в тему, обратитесь к главе 6 книги «Статистика для экспериментаторов — проектирование, инновации и открытия» (второе издание). Из главы 6 я также взял два примера, которые мы проанализировали с помощью R. Также посетите сайт пакета FrF2, если вы хотите глубже изучить использование функций, которые я использовал в этом посте: FrF2.
Хуан Пабло Карреон Идальго 🤓
[электронная почта защищена]
https://twitter.com/JuanPa2601
Эта работа находится под лицензией Международная лицензия Creative Commons Attribution 4.0.
К оставьте комментарий для автора, пройдите по ссылке и оставьте комментарий в их блоге: Р в Лаборатории .
R-bloggers.com предлагает ежедневных обновления по электронной почте новостей R и руководств по изучению R и многим другим темам. Нажмите здесь, если вы хотите опубликовать или найти работу R/data-science.
Хотите поделиться своим контентом с R-блогерами? нажмите здесь, если у вас есть блог, или здесь, если у вас его нет.
Проектирование системы управления с помощью видео приложения Control System Designer
Используйте Control System Toolbox™ для разработки контроллеров с одним входом и одним выходом (SISO) с использованием интерактивных и автоматизированных методов настройки. Используйте редактор Bode Editor и Root Locus Editor для добавления и удаления полюсов и нулей контроллера, а также для изменения усиления контура. Просмотрите изменения в переходной характеристике с обратной связью, когда вы настраиваете параметры контроллера. Соблюдайте характеристики системы, такие как время нарастания, перерегулирование, запасы по усилению и фазе. Создавайте и сохраняйте несколько проектов контроллеров для сравнения и выбора наилучшего варианта.
Записано: 3 марта 2016 г.
Приложение Control System Designer позволяет настраивать компенсаторы с одним входом и одним выходом с использованием графических и автоматических методов настройки. Если вы знаете свою передаточную функцию, sys, в этом простом случае 1 больше s плюс 1, вы можете запустить приложение Control System Designer, набрав controlSystemDesigner(sys).
Приложение открывает несколько сюжетов. Здесь вы видите Редактор Боде, а здесь Редактор корневого локуса. Вы можете использовать графики для графической настройки. На этом графике вы получаете переходную характеристику системы с обратной связью. Если вы нажмете «Редактировать архитектуру», вы сможете настроить архитектуру вашего контроллера и импортировать новые передаточные функции предприятия и существующие компенсаторы.
В разделе «Методы настройки» вы можете выбрать графические методы настройки, которые вы хотите использовать, Боде, Боде с обратной связью, Root Locus и Николя. В этом случае мы будем придерживаться уже открытых редакторов Bode и Root Locus. Теперь, когда вы выбрали расчетные графики, вы можете приступить к настройке вашего компенсатора. Чтобы изменить усиление вашего компенсатора, отрегулируйте величину графика Боде или переместите полюса с обратной связью в редакторе Root Locus.
Вы можете легко добавлять полюса и нули к вашему компенсатору. В этом случае системе необходим интегратор для достижения нулевой установившейся ошибки. После добавления интегратора вы можете отрегулировать усиление компенсатора, чтобы добиться красивого затухания отклика.
На графике переходной характеристики можно проверить характеристики системы. Например, вы можете видеть, что время нарастания составляет около 2 и 1/2 секунды. Если вы хотите сделать отклик более быстрым и сохранить его хорошо задемпфированным, вы можете добавить в систему опережающий компенсатор. Теперь вы можете в интерактивном режиме изменить расположение полюсов и нулей, а также величину компенсатора.
Если щелкнуть правой кнопкой мыши на одном из расчетных графиков и выбрать «Редактировать компенсатор», вы увидите структуру компенсатора. Сейчас у него есть усиление, интегратор и опережение. Вы можете редактировать параметры прямо здесь. Например, вы можете поместить ноль на минус один и полюс на минус 10. По мере внесения изменений обратите внимание, как инструмент автоматически вычисляет величину максимального фразового опережения от компенсатора скачка и соответствующую частоту.
Вместо того, чтобы вводить нулевое и полюсное расположение, вы можете указать количество фразовых лидов, которые вы хотите, и частоту, где вы хотите.