![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#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 |
|
![]() |
![]() |
![]() |
![]()
Сообщение
#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 |
|
![]() |
![]() |
![]() ![]() |