Skip to main content
LibreTexts - Ukrayinska

11.7: Використання R для багатовимірної лінійної регресії

  • Page ID
    17762
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)

    Щоб проілюструвати, як ми можемо використовувати R для завершення багатоваріантної лінійної регресії, скористайтеся цим посиланням та збережіть файл allSpec.csv у вашому робочому каталозі. Дані в цьому файлі складаються з 80 рядків і 642 стовпців. Кожен ряд є незалежним зразком, який містить один або кілька наступних катіонів перехідних металів: Cu 2 +, Co 2 +, Cr 3 + і Ni 2 +. Перші сім колонок надають інформацію про зразки:

    • id зразка (у вигляді custd_1 для єдиного стандарту Cu 2 + або nicu_mix1 для суміші Ni 2 + і Cu 2 +)
    • перелік аналітів у зразку (у вигляді cuco для зразка, що містить Cu 2 + і Co 2 +)
    • кількість аналітів у зразку (число від 1 до 4 і марковане як розміри)
    • молярна концентрація Cu 2 + в зразку
    • молярна концентрація Co 2 + в зразку
    • молярна концентрація Cr 3 + в зразку
    • молярна концентрація Ni 2 + в зразку

    Решта стовпців містять значення поглинання на 635 довжині хвиль між 380,5 нм і 899,5 нм. Ми будемо використовувати підмножину цих даних, ідентичну тій, яка використовується для ілюстрації кластерного аналізу та аналізу основних компонентів.

    По-перше, нам потрібно прочитати дані в R, що ми робимо за допомогою функції read.csv ()

    Спец_дані <- read.csv (» allSpec.csv «, перевірка.імена = ПОМИЛКОВО)

    де параметр check.names = FALSE перевизначає типову функцію, щоб не дозволити ім'я стовпця починатися з числа. Далі ми створимо об'єкти для утримання концентрацій та поглинань для стандартних розчинів Cu 2 +, Cr 3 + та Co 2 +, які є трьома аналітами

    довжина хвилі_іди = seq (8, 642, 40)
    abs_stds = spec_data [1:15, довжина хвилі_ids]
    conc_stds = даний.кадр (spec_data [1:15, 4], spec_data [1:15, 5], spec_data [1:15, 6])
    abs_samples = spec_data [c (1, 6, 11, 21:25, 38:53), довжина хвилі_ids]

    де wavelength_ids - вектор, який ідентифікує 16 однаково розташованих довжин хвиль, abs_stds - це кадр даних, який дає значення поглинання для 15 стандартних рішень трьох аналітів Cu 2 +, Cr 3 + та Co 2 + на довжині хвиль 16 conc_stds - це кадр даних, який містить концентрації трьох аналітів у стандартних рішеннях 15, а abs_samples - це кадр даних, який містить поглинання зразка 24 на довжині хвиль 16. Це ті самі дані, які використовуються для ілюстрації кластерного аналізу та аналізу основних компонентів.

    Для вирішення\(\epsilon b\) матриці ми запишемо та отримаємо наступну функцію, яка приймає два об'єкти - кадр даних значень поглинання та кадр даних концентрацій - і повертає матрицю\(\epsilon b\) значень.

    findeb = функція (абс, конц) {
    abs.m = as.matrix (abs)
    concm = as.matrix (conc)
    ct = t (
    concm) ctc = ct %*%
    concm invctc = вирішити (CTC)
    eb = invctc %*% ct %*% abs.m
    вихід = бути
    невидимим ( вихід)
    }

    Передача abs_stds і conc_stds у функцію

    eb_pred = знайдено (abs_stds, conc_stds)

    повертає передбачені значення для\(\epsilon b\) цього складають наше калібрування. Як ми бачимо нижче, графік\(\epsilon b\) значень для Cu 2 + має таку ж форму, як і графік значень поглинання для одного з стандартів Cu 2 +.

    довжини хвиль = як.numeric (прізвища (spec_data [8:642]))
    old.par = пар (mmrow = c (2,1))
    графік (x = довжини хвиль [довжина хвилі [ids], y = eb_pred [1,], тип = «b»,
    xlab = «довжина хвилі (нм)», ylab = «eb», lwd = 2, col = «синій»)
    графік (x = довжини хвиль, y = spec_ дані [1, 8:642], тип = «l»,
    xlab = «довжина хвилі (нм)», ylab = «поглинання», lwd = 2, col = «синій»)
    пар (old.par)

    mvr1.png

    Завершивши калібрування, ми можемо визначити концентрації трьох аналітів у зразках 24 за допомогою наступної функції, яка приймає як вхідні дані кадру даних значень абсорбенції та\(\epsilon b\) матрицю, яку повертає функція findeb

    findconc = функція (abs, eb) {
    abs.m = як.матриця (abs)
    ebm = як.матриця (
    ЕБ) Ебт = t (ebm)
    ebet = eb %*% ebet
    інвебет = вирішити (ebebt)
    pred_conc = круглий (abs.m %*% Ебт %*% інвебебт, цифри = 5)
    вихід = pred_conc
    невидимий (вихід)
    }
    pred_conc = findconc (abs_samples, eb_pred)

    Щоб визначити похибку в прогнозованих концентраціях, ми спочатку витягуємо фактичні концентрації з вихідного набору даних як фрейм даних, коригуючи назви стовпців для наочності.

    real_conc = data.frame (спец_дані [c (1, 6, 11, 21:25, 38:53), 4],
    spec_data [c (1, 6, 11, 21:25, 38:53), 5],
    spec_data [c (1, 6, 11, 21:25, 38:53), 6])
    прізвища (real_conc) = c («мідь», «кобальт», «хром»)

    і визначити різницю між фактичними концентраціями та прогнозованими концентраціями

    conc_error = реальні_conc - перед_конц

    Нарешті, ми можемо повідомити про середню помилку, стандартне відхилення та довірчий інтервал 95% для кожного аналіта.

    означає = застосувати (conc_error, 2, середнє)
    круглий (означає, цифри = 6)

    мідь кобальт хром

    -0.000280 -0.000153 -0.000210

    sds = застосовувати (conc_error, 2, sd)
    круглий (sds, цифри = 6)

    мідь кобальт хром

    0.001037 0,000811 0,000688

    conf.it = абс (qt (0,05/2, 20)) * сдс
    круглий (conf.it, цифри = 6)

    мідь кобальт хром

    0.002163 0.00163 0,001434

    Порівняно з діапазонами концентрацій для трьох аналітів у зразках 24

    діапазон (реальні_conc$ мідь)

    [1] 0.00 0.05

    діапазон (реальні_conc$ кобальт)

    [1] 0.0 0,1

    діапазон (реальні_conc$ хром)

    [1] 0.0000 0.0375

    середні похибки та довірчі інтервали досить малі, щоб ми мали впевненість у результатах.