2014 dxdy logo

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

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




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


20/03/12
267
СПб
Здравствуйте!

Есть таблица такого вида.
$\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 
Заслуженный участник


09/05/13
8904
∞⠀⠀⠀⠀
Не знаю, чем могу помочь в R, но давайте хотя бы постановку задачи причешем.
$j$ - объем выборки, $i$ - число регрессоров?

-- 13.06.2022, 13:45 --

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

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

 Профиль  
                  
 
 Re: Регрессия в R
Сообщение13.06.2022, 12:10 
Аватара пользователя


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



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

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


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

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

 Профиль  
                  
 
 Re: Регрессия в R
Сообщение13.06.2022, 12:12 
Заслуженный участник


09/05/13
8904
∞⠀⠀⠀⠀
metelev в сообщении #1557241 писал(а):
Мне вообще-то приходится в википедию лезть, чтобы посмотреть значение слов "регрессор" и "объём выборки".

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

 Профиль  
                  
 
 Re: Регрессия в R
Сообщение13.06.2022, 12:25 
Аватара пользователя


20/03/12
267
СПб
Otta в сообщении #1557242 писал(а):
Может, тогда проще привести исходную постановку задачи?


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

 Профиль  
                  
 
 Re: Регрессия в R
Сообщение13.06.2022, 13:08 
Заслуженный участник
Аватара пользователя


01/09/13
4656
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 
Заслуженный участник


09/05/13
8904
∞⠀⠀⠀⠀
$$ \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 
Аватара пользователя


20/03/12
267
СПб
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 
Заслуженный участник
Аватара пользователя


01/09/13
4656
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 
Аватара пользователя


20/03/12
267
СПб
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 
Заслуженный участник
Аватара пользователя


01/09/13
4656
metelev в сообщении #1557297 писал(а):
Там же есть $\mathrm{e^n_j}$, который не умножается на $\mathrm{a}$.

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

-- 13.06.2022, 22:36 --

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

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

 Профиль  
                  
 
 Re: Регрессия в R
Сообщение14.06.2022, 09:03 
Аватара пользователя


20/03/12
267
СПб
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 
Заслуженный участник
Аватара пользователя


01/09/13
4656
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 
Аватара пользователя


20/03/12
267
СПб
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 
Заслуженный участник
Аватара пользователя


01/09/13
4656
metelev в сообщении #1557349 писал(а):
Можно, если $d_i\alpha=0$,

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 44 ]  На страницу 1, 2, 3  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group