Переберите статистические модели и построите кривую кривой соответствия - PullRequest
0 голосов
/ 10 декабря 2018

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

DF<- as.data.frame(matrix(sample(1:50, 1*2000, replace=TRUE), ncol=4))
colnames(DF) <- c("Response_1","Response_2","Explanatory_1","Explanatory_2")
DF$Factor <- rep(c("Control","Impact"), each = 250)

List_models <- list(lm(Response_1~exp(Explanatory_1):Factor, data=DF), 
                lm(Response_1~Explanatory_2:Factor, data=DF),
                lm(Response_2~Explanatory_1:Factor, data=DF),
                lm(Response_2~exp(Explanatory_2):Factor, data=DF))

Я предполагаю, что здесь будет работать какая-то функция lapply, но я не знаю, как это сделать при изменении функции, связанной с x, или изменении отображаемой переменной Response and Explanatory.Приведенный ниже код дает идеальный результат, но я хотел бы создать его с помощью некоторой функции цикла.

par(mfrow=c(2,2))
plot(Response_1~Explanatory_1,data=DF,type="n")
curve(List_models[[1]]$coefficients[1]+List_models[[1]]$coefficients[2]*exp(x), add = TRUE)
plot(Response_1~Explanatory_2,data=DF,type="n")
curve(List_models[[2]]$coefficients[1]+List_models[[2]]$coefficients[2]*x, add = TRUE)
plot(Response_2~Explanatory_1,data=DF,type="n")
curve(List_models[[3]]$coefficients[1]+List_models[[3]]$coefficients[2]*x, add = TRUE)
plot(Response_2~Explanatory_2,data=DF,type="n")
curve(List_models[[4]]$coefficients[1]+List_models[[4]]$coefficients[2]*exp(x), add = TRUE)

Заранее благодарю за любую помощь в этом.

1 Ответ

0 голосов
/ 10 декабря 2018

Как сказал Грегор, вам нужно predict, чтобы получить прогнозируемые значения.Я бы настоятельно рекомендовал вам использовать ggplot, для простоты в такого рода представлениях:

DF$model1 <- predict(List_models[[1]])
DF$model2 <- predict(List_models[[2]])

library(ggplot2)
ggplot(DF)+
  geom_point(aes(X,Y,color = "initial values"))+
  geom_line(aes(X,model1,color = "model1"))+
  geom_line(aes(X,model2,color = "model2"))+
  facet_wrap(~Factor)

enter image description here

Если у вас много моделей, и вы хотитедля цикла вам понадобится что-то вроде этого:

for(i in 1:length(List_models))
    {DF[[paste0("model",i)]] <-  predict(List_models[[i]])}
library(data.table)
DF <- setDT(DF)

library(ggplot2)
ggplot(melt(DF,measure.vars = patterns("model")))+
  geom_point(aes(X,Y,color = "initial values"))+
  geom_line(aes(X,value,color = variable))+
  facet_wrap(~Factor)
...