2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2, 3  След.
 
 Регрессия в R
Сообщение13.06.2022, 11:21 
Аватара пользователя
Здравствуйте!

Есть таблица такого вида.
$\begin{tabular}[b]{| l | l | l | l | l |}
\hline
          &           & a_1 & a_2       & \cdots \\ \hline
e^n_1 & e^a_1& e_{11}     & e_{12}    &           \\ \hline
e^n_2 & e^a_2& e_{21}     & e_{22}    &           \\ \hline
\vdots&   &            &          &           \\ \hline
\end{tabular}$

Здесь $\mathrm{e_{ij}}$ --- экспериментальные данные.
Коэффициенты $\mathrm{a_i}$, $\mathrm{e^n_j}$, $\mathrm{e^a_j}$--- неизвестные числа, хотелось бы их найти.
Должны выполняться соотношения $\mathrm{e_{ij}=a_i e^a_j +(1-a_i) e^n_j}$

Хотелось бы сделать это в R.

Обычно для линейной модели данные записываются в виде двух столбцов с числами и в ответе получается всего два параметра и много всякой статистической информации про них. Здесь у меня много параметров, $i\approx 20$, $j\approx 100$. И к виду двух столбцов никак не преобразовать. Как лучше исходную таблицу оформить и как красиво и компактно организовать такое вычисление?

Для примера, таблицу можно было бы записать так.
Код:
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)) : ‘*’ не значимо для факторов


Помогите пожалуйста.

 
 
 
 Re: Регрессия в R
Сообщение13.06.2022, 11:43 
Не знаю, чем могу помочь в R, но давайте хотя бы постановку задачи причешем.
$j$ - объем выборки, $i$ - число регрессоров?

-- 13.06.2022, 13:45 --

metelev в сообщении #1557234 писал(а):
Обычно для линейной модели данные записываются в виде двух столбцов с числами и в ответе получается всего два параметра и много всякой статистической информации про них.

Обычно... обычно регрессия бывает не только парная, но и множественная.

 
 
 
 Re: Регрессия в R
Сообщение13.06.2022, 12:10 
Аватара пользователя
Otta в сообщении #1557237 писал(а):
Не знаю, чем могу помочь в R, но давайте хотя бы постановку задачи причешем.
$j$ - объем выборки, $i$ - число регрессоров?



Мне вообще-то приходится в википедию лезть, чтобы посмотреть значение слов "регрессор" и "объём выборки". Так что я могу ошибаться, но если я правильно понимаю, то объём выборки в моём случае это $ij$, а количество регрессоров $i+2j$. Объём выборки несколько тысяч значений, а количество регрессоров несколько сотен.

Otta в сообщении #1557237 писал(а):
Обычно... обычно регрессия бывает не только парная, но и множественная.


Видимо в моём случае множественная :-) Каждое измеренное значение зависит от трёх регрессоров.

Да, и спасибо за ответ.

 
 
 
 Re: Регрессия в R
Сообщение13.06.2022, 12:12 
metelev в сообщении #1557241 писал(а):
Мне вообще-то приходится в википедию лезть, чтобы посмотреть значение слов "регрессор" и "объём выборки".

Может, тогда проще привести исходную постановку задачи?

 
 
 
 Re: Регрессия в R
Сообщение13.06.2022, 12:25 
Аватара пользователя
Otta в сообщении #1557242 писал(а):
Может, тогда проще привести исходную постановку задачи?


Так я вроде всё подробно написал. Имеется прямоугольная таблица с данными. Каждой строчке соответствует 2 неизвестных числа, каждому столбцу --- одно. Хочется их оттуда извлечь. Есть формула, которая связывает измеренное значение и регрессоры эти.

 
 
 
 Re: Регрессия в R
Сообщение13.06.2022, 13:08 
Аватара пользователя
metelev в сообщении #1557234 писал(а):
Обычно для линейной модели

А у Вас линейная?

-- 13.06.2022, 13:16 --

metelev в сообщении #1557234 писал(а):
Хотелось бы сделать это в R.

Сначала лучше бы математически поанализировать задачу...

metelev в сообщении #1557234 писал(а):
Должны выполняться соотношения $\mathrm{e_{ij}=a_i e^a_j +(1-a_i) e^n_j}$

Ужасная формула, страшно несимметричная и аж два умножения. Сможете преписать её в "симметричном" виде и с одним умножением? - это позволит часть параметров вычислить без всякой регрессии.

-- 13.06.2022, 13:22 --

Кроме того, есть некоторая недоопределённость задачи - одновременное умножение всех $a$ на ненулевой коэффициент $r$ и деление всех $e$ на него же не меняет "соотношений" - это плохо скажется на любых методах "регрессии"...

 
 
 
 Re: Регрессия в R
Сообщение13.06.2022, 13:32 
$$ \begin{tabular}{c|c|c}
\hline 
& & a_1\\
\hline 
e_1 & e_2 & e_1a_1+(1-a_1)e_2 =2\\
\hline 
\end{tabular} $$

В качестве примера. Пусть угловой элемент (внутре!) равен двум и нам известен. Тогда имеем (нелинейное) уравнение относительно трех неизвестных. Решений у него (как правило) много. И это претендент на точечную оценку параметра.

Итого:

А она есть вообще, регрессия?

-- 13.06.2022, 15:37 --

Чтой-то я долго набирала и думала, даже пост Geen не заметила.

 
 
 
 Re: Регрессия в R
Сообщение13.06.2022, 21:06 
Аватара пользователя
Otta в сообщении #1557255 писал(а):
качестве примера. Пусть угловой элемент (внутре!) равен двум и нам известен.


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

Otta в сообщении #1557255 писал(а):
Тогда имеем (нелинейное) уравнение относительно трех неизвестных.


Так по каждому аргументу линейное. Было бы их два, сказал бы что билинейное. А так не знаю, как это называется.

Otta в сообщении #1557255 писал(а):
А она есть вообще, регрессия?


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

Geen в сообщении #1557252 писал(а):
Ужасная формула, страшно несимметричная и аж два умножения. Сможете преписать её в "симметричном" виде и с одним умножением? - это позволит часть параметров вычислить без всякой регрессии.


Ну можно конечно переписать так: $\mathrm{e_{ij}=a_i(e^a_j-e^n_j) +e^n_j }$ и затем как-нибудь переименовать разность. Каким образом это позволит что-то вычислить?

Я вообще изначально думал как раз в таком направлении. Дальше можно вычитать один столбец из другого, тем самым избавится от $\mathrm{e^n_j}$. Потом ещё можно поделить разностные столбцы друг на друга. И строчки друг на друга тоже можно поделить. Избавиться от одной из компонент. Я так проверял, что данные укладываются в модель. Примерно получается что да, укладываются. Но обратно до чисел эти частные не развернуть. Получается два параметра. Которые тоже надо как-то находить.

Тогда я подумал, что может можно "в лоб" это всё решить.

Ну должен он это уметь (в смысле R). Мне кажется, я даже когда-то что-то подобное делал. Но делал давно и прочно забыл.

-- 13.06.2022, 21:11 --

Geen в сообщении #1557252 писал(а):
Кроме того, есть некоторая недоопределённость задачи - одновременное умножение всех $a$ на ненулевой коэффициент $r$ и деление всех $e$ на него же не меняет "соотношений" - это плохо скажется на любых методах "регрессии"...


Да, это правда. В общем виде она бы не решилась. Но там есть строчки где $e^n_j=e^a_j$, по идее это должно исключить неоднозначность.

 
 
 
 Re: Регрессия в R
Сообщение13.06.2022, 21:25 
Аватара пользователя
metelev в сообщении #1557286 писал(а):
Дальше можно вычитать один столбец из другого, тем самым избавится от $\mathrm{e^n_j}$.

Гммм, а двайте немного преобразуем исходные данные - например, из каждой строки вычтем её среднее...

-- 13.06.2022, 21:37 --

metelev в сообщении #1557286 писал(а):
Но там есть строчки где $e^n_j=e^a_j$, по идее это должно исключить неоднозначность.

Это же каким образом?

 
 
 
 Re: Регрессия в R
Сообщение13.06.2022, 21:39 
Аватара пользователя
Geen в сообщении #1557291 писал(а):
Гммм, а двайте немного преобразуем исходные данные - например, из каждой строки вычтем её среднее...


Да, тоже способ избавиться от $\mathrm{e^n_j}$. Получим $\mathrm{e_{ij}=(a_i-\overline{a})(e^a_j-e^n_j) }$

Но всё равно останется неизвестный параметр, по крайней мере один.

Кстати, я подумал что поторопился согласиться что умножение всех $\mathrm{a}$ на коэффициент и деление всех $\mathrm{e}$ на тот же коэффициент оставит решение прежним. Там же есть $\mathrm{e^n_j}$, который не умножается на $\mathrm{a}$.

 
 
 
 Re: Регрессия в R
Сообщение13.06.2022, 22:34 
Аватара пользователя
metelev в сообщении #1557297 писал(а):
Там же есть $\mathrm{e^n_j}$, который не умножается на $\mathrm{a}$.

Согласен. Но с ним мы проделаем другую штуку - можем ли мы прибавить произвольное число ко всем $a$? В частности, потребовать что бы их среднее равнялось $0$?

-- 13.06.2022, 22:36 --

metelev в сообщении #1557297 писал(а):
Но всё равно останется неизвестный параметр, по крайней мере один.

Какой параметр Вы имеете в виду?

 
 
 
 Re: Регрессия в R
Сообщение14.06.2022, 09:03 
Аватара пользователя
Geen в сообщении #1557311 писал(а):
Согласен. Но с ним мы проделаем другую штуку - можем ли мы прибавить произвольное число ко всем $a$? В частности, потребовать что бы их среднее равнялось $0$?


Можем, да. Найти среднее

$\displaystyle \frac{1}{n}\sum_{i=1}^{n}  \mathrm{a_i(e^a_j-e^n_j) +e^n_j = \overline{a} (e^a_j-e^n_j) +e^n_j}$

Здесь $\mathrm{\overline{a}}$ это среднее $\mathrm{a_i}$ И потом вычесть из соответствующей строчки. Я там выше написал уже финальное выражение.

Но то, что получится, уже будет отличаться от исходной задачи. Туда будет входить $\mathrm{\overline{a}}$, которое мы не знаем. Вот уже один параметр, который потом придётся отдельно искать. Мы же пока что не знаем $\mathrm{a_i}$

Или я тороплюсь и тут другая какая-то мысль?

 
 
 
 Re: Регрессия в R
Сообщение14.06.2022, 11:37 
Аватара пользователя
metelev в сообщении #1557334 писал(а):
Вот уже один параметр, который потом придётся отдельно искать.
Geen в сообщении #1557252 писал(а):
есть некоторая недоопределённость задачи

....
Давайте немного изменим обозначения (а то одни сплошные "е"): $e_{ij}=d_ia_j+m_i$, ок? (только обращаю внимание на индексы - они соответствуют самой первой таблице, а не формуле)
Пусть теперь $A_j, D_i, M_i$ некоторое решение указанной системы. Можно ли получить ещё одно решение, если заменить $A_j$ на $A'_j=A_j+\alpha$?

 
 
 
 Re: Регрессия в R
Сообщение14.06.2022, 12:40 
Аватара пользователя
Geen в сообщении #1557342 писал(а):
Можно ли получить ещё одно решение, если заменить $A_j$ на $A'_j=A_j+\alpha$?

Можно, если $d_i\alpha=0$,

-- 14.06.2022, 12:47 --

Что, в свою очередь, означает что либо $d_i=0$ либо $\alpha=0$. Ну а $d_i$ у меня практически нигде не равны нулю, за исключением одной-двух строчек из всей таблицы.

 
 
 
 Re: Регрессия в R
Сообщение14.06.2022, 13:34 
Аватара пользователя
metelev в сообщении #1557349 писал(а):
Можно, если $d_i\alpha=0$,

Зачем это требование? Ведь $M$ и $D$ можно тоже изменить ("одновременно" с $A$)?

 
 
 [ Сообщений: 44 ]  На страницу 1, 2, 3  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group