Здравствуйте!
Есть таблица такого вида.
Здесь
--- экспериментальные данные.
Коэффициенты
,
,
--- неизвестные числа, хотелось бы их найти.
Должны выполняться соотношения
Хотелось бы сделать это в R.
Обычно для линейной модели данные записываются в виде двух столбцов с числами и в ответе получается всего два параметра и много всякой статистической информации про них. Здесь у меня много параметров,
,
. И к виду двух столбцов никак не преобразовать. Как лучше исходную таблицу оформить и как красиво и компактно организовать такое вычисление?
Для примера, таблицу можно было бы записать так.
Код:
library(tidyverse)
data=tribble( ~en, ~ea, ~a1
"en1", "ea1", 0.1, 0.2, 0.3
"en2", "ea2", 0.4, 0.5, 0.6
"en3", "ea3", 0.7,0.8,0.9)
Можно преобразовать в "длинный" вид:
Код:
> data2 <- data %>% pivot_longer(-c(en,ea),names_to="a",values_to="e")
> data2
# A tibble: 9 × 4
en ea a e
<chr> <chr> <chr> <dbl>
1 en1 ea1 a1 0.1
2 en1 ea1 a2 0.2
3 en1 ea1 a3 0.3
4 en2 ea2 a1 0.4
5 en2 ea2 a2 0.5
6 en2 ea2 a3 0.6
7 en3 ea3 a1 0.7
8 en3 ea3 a2 0.8
9 en3 ea3 a3 0.9
Далее что-то вроде такого. (Понятно, что записано неправильно, но как сделать правильно мне сложно сообразить).
Код:
> data2$en<-as.factor(data2$en)
> data2$ea<-as.factor(data2$ea)
> data2$a<-as.factor(data2$a)
> data2
# A tibble: 9 × 4
en ea a e
<fct> <fct> <fct> <dbl>
1 en1 ea1 a1 0.1
2 en1 ea1 a2 0.2
3 en1 ea1 a3 0.3
4 en2 ea2 a1 0.4
5 en2 ea2 a2 0.5
6 en2 ea2 a3 0.6
7 en3 ea3 a1 0.7
8 en3 ea3 a2 0.8
9 en3 ea3 a3 0.9
> lm(e~I(ea*a+en*(1-a)),data2)
Ошибка в lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
0 (не-NA) случаев
Вдобавок: Предупреждения:
1: В Ops.factor(ea, a) : ‘*’ не значимо для факторов
2: В Ops.factor(1, a) : ‘-’ не значимо для факторов
3: В Ops.factor(en, (1 - a)) : ‘*’ не значимо для факторов
Помогите пожалуйста.