Как использовать результаты линейной модели с интерактивными переменными и преобразованиями и создать алгебраическое уравнение

У меня есть проект по оценке объектов коммерческой недвижимости с учетом категориальных и непрерывных переменных. Я запустил модель пошаговой линейной регрессии, чтобы выбрать хорошую формулу в RStudio. (Кроме того, Adj. Rsq = 0,90, я знаю, что мне нужно выполнить PCA и какой-то тип категориального теста ANOVA, но я просто хочу получить бета-оценку, прежде чем углубляться.)

Как мне получить результат моей функции step(lm()) и создать символьное алгебраическое выражение/уравнение с коэффициентами, например:

  • log(цена)= M1X1 + M2X2 + ... + MnXn.

Где М — мой коэффициент, а Х — моя переменная. Я знаю, что мог бы сделать это вручную в Excel, но с таким количеством взаимодействий и базовых переменных это кажется чрезмерным. Может быть, в R есть функция, или я мог бы сделать функцию в питоне, которая спрашивала бы, каковы значения переменных, необходимых для расчета; но я ни о ком не подумал.

Большое спасибо! Если что-то не достаточно конкретно, я сделаю все возможное, чтобы объяснить.


person S_Stand_ring    schedule 31.03.2017    source источник
comment
При обращении за помощью в написании кода вы должны предоставить воспроизводимый пример с образцы входных данных, которые мы можем использовать для проверки возможных решений. Кроме того, вы действительно должны задавать не более одного вопроса за раз, потому что вы можете принять не более одного ответа. Наконец, ваш второй вопрос действительно больше касается статистического моделирования, чем программирования, поэтому он лучше подходит для Cross Validated (сайт, посвященный статистическим вопросам), чем здесь. В первой части вы смотрели на coef()?   -  person MrFlick    schedule 31.03.2017
comment
lm позволяет трансформировать переменные, например. lm(log(demand) ~ I(Time^2), BOD). Используйте predict, чтобы получить прогнозируемые значения с учетом новых значений предикторов.   -  person G. Grothendieck    schedule 31.03.2017
comment
@MrFlick Спасибо за критику за разработку правильных вопросов, я обязательно воспользуюсь вашим советом (на самом деле меня направили сюда после того, как я впервые разместил этот вопрос в Перекрестная проверка.   -  person S_Stand_ring    schedule 31.03.2017
comment
Что касается coef(), он дает мне коэффициенты, но я больше ищу вывод, который возвращает полное выражение. Как и в этом комментарии. Упоминание OP о желании поместить уравнения на графики, я размышлял, действительно ли они хотят, чтобы функция брала вывод lm и создавала символьное выражение, такое как y ^ = -0,00761 + 0,09156x, подходящее для такой задачи построения графика (следовательно мой неоднократный звонок, чтобы уточнить, что они хотели - что, к сожалению, не было сделано). от @Glen_b   -  person S_Stand_ring    schedule 31.03.2017
comment
@ G.Grothendieck После более подробного изучения predict я не верю, что это то, что я ищу, поскольку нам не дано уравнение характера модели. Кстати, predict выглядит чрезвычайно полезно! Используется ли он чаще всего для проверки новых данных на модели, чтобы убедиться, что модель не слишком подходит?   -  person S_Stand_ring    schedule 31.03.2017


Ответы (1)


Насколько я знаю, для этого нет встроенной функции (формулы могут быть довольно запутанными для разных типов моделей). Но если у вас есть простая линейная модель, возможно, эта функция может помочь

as_disp_eqn <- function(model, formatter=prettyNum, ...) {
    model_terms <- terms(model)
    model_response <- deparse(as.list(attr(model_terms, "variables")[-1])[[attr(model_terms, "response")]])
    coefs <- coef(model)
    rhs <- paste0(formatter(coefs, ...), ifelse(names(coefs)!="(Intercept)", paste(" *", names(coefs)),""))
    paste(model_response, "=", paste(rhs, collapse=" + "))
}

Вы можете сдать модель и получить печатный дисплей. Например

mm <- lm(formula = Sepal.Length ~ Sepal.Width + Petal.Length + Species, data = iris)
as_disp_eqn(mm, digits=2)
# [1] "Sepal.Length = 2.4 + 0.43 * Sepal.Width + 0.78 * Petal.Length + -0.96 * Speciesversicolor + -1.4 * Speciesvirginica"
person MrFlick    schedule 31.03.2017
comment
Это круто. Я не уверен, что моя модель проста, но на самом деле это то, что я ищу. Я уверен, что смогу найти способ адаптировать его, если это не так. Спасибо за молодого искателя знаний. - person S_Stand_ring; 31.03.2017