Форум врачей-аспирантов

Здравствуйте, гость ( Вход | Регистрация )

> Трансплантация коэффициентов уравнения линейной регрессии от одной модели другой, в R
ИНО
сообщение 28.04.2025 - 19:05
Сообщение #1





Группа: Пользователи
Сообщений: 262
Регистрация: 1.06.2022
Из: Донецк
Пользователь №: 39632



Задача в том, чтобы обучить модель линейной регрессии (см. тему соседнюю) на одних данных, а потом применить к другим, при этом не меняя коэффициентов. Извлечь коэффициенты из объекта класса "lm" легко, но как правильно передать другой модели? С некоторым удивлением не обнаружил в синтаксисе функции lm() возможности задачи пользовательских коэффициентов для каждого члена уравнения. На буржуйских формах что-то пишут о применении служебной функции offset(), но я так и не понял как ее запрограммировать в случае множественной регрессии со взаимодействиями категориальных переменных с числовыми. Поэтому возникла идея тупой "пересадки органов". Логика подсказывает, что помимо $coefficients требуется пересадить еще и $fitted.values (в моем случае все наблюдения во модели-реципиенте являются подмножеством наблюдений на которых построена модель-донор, так что можно просто выкинуть лишние значения). Если бы это было не так, можно было бы подогнать новые, применив к модели-донору функцию predict() с наблюдениями, используемыми в модели-реципиенте, в качестве аргумента newdata. Далее следует поменять остатки ($residuals). Их можно не пересаживать, а вычислить, вычтя пересаженные $fitted.values из родных для реципиента $model$имя_зависимой_переменной. Достаточно ли перечисленных операций для того, чтобы модель-реципиент стала вести себя так, будто была построена на априорно заданных коэффициентах в таких задачах как построение доверительных интервалов, вычисление F-статистики и R2? Или надо пересаживать что-то еще? Просто внутри объекта "lm", помимо вышеназванного, напихано много всякого, что недоступно моему разумению. Быть может, без редактирования чего-нибудь из этого в дополнение к проделанным трансплантациям органов, чье назначение мне ясно, организм донора будет функционировать не совcем правильно, выдавая вместо ожидаемых от него результатов погоду на Луне?

Сообщение отредактировал ИНО - 28.04.2025 - 19:05
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
 
Открыть тему
Ответов
ИНО
сообщение 10.05.2025 - 23:01
Сообщение #2





Группа: Пользователи
Сообщений: 262
Регистрация: 1.06.2022
Из: Донецк
Пользователь №: 39632



Спасибо, но что-то Ваш самопальный R2 на данном синтетическом примере выдает нечто удивительное, а именно -215031.1. Я даже не представляю, какой статистический смысл может нести это странное число. Хотя в нормальных ситуациях, где подгонка модели осуществлялась по методу наименьших квадратов, вроде все фурычет, как надо, и сама формула соответствует прописям. Выходит что ж R2, в случае с моделями с кожффициентами, взятыми с потолка, теряет всякий смысл? А как же квадрат корреляции? Вот альтернативная формула, которая гарантирует иyтервал [0; 1]:

Код
R2=cor(fit1$model$response, fit1$fitted.values)^2


0.1524337

Но ни Ваш R2, ни мой, не соответствуют

Код
summary(fit1)$r.squared


0.08443

Вот-это уже совсем непонятно, поскольку данное несоответствие наблюдается исключительно в "перепрошитых" моделях, в обычных все три цифры сходятся. Сначала я грешил на так и не понятый мною компонент $effects, который оставлял неизменным, однако даже полное его удаление никак не влияет на работу функции summary(). А все прочее, что относилось к переменной отклика, я отредактировал, как мне кажется, вполне корректно. Проверить соответствие штатного R2 c самопальными для модели fit2 оказалось невозможно - summary() с ней не работает толком, поскольку коэффициентов внутри нет, и предсказания с аргументом newdata она делать не умеет. Т. е. это не полноценная регрессионная модель, а выкидыш какой-то. Так что этот хитровыделанный offset() - не для меня. А для объектов класса "nls" свой штатный R2 не предусмотрен в принципе, как и много чего еще. Так что кроме насилия над объектами "lm" выхода по-прежнему не вижу.

Еще пара слов об $effects: оказывается, без него не работает anova(). Причем суммы квадратов в таблице определяются именно им, хотя на значения F-статистики из той же таблицы влияет и что-то из мною замененного. В итоге получается некая гибридная таблица, корректность которой весьма сомнительна. Так что при трансплантации коэффициентов $effects по-хорошему тоже надо редактировать, но я понятия не имею как, поскольку даже не представляю что оно такое, и откуда берется.

Сообщение отредактировал ИНО - 10.05.2025 - 23:01
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 

Сообщений в этой теме


Добавить ответ в эту темуОткрыть тему