Извлечение списка R2 из lm () на основе переменной в множественной регрессии в R - PullRequest
1 голос
/ 01 июля 2019

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

Это почти тот же вопрос, что и: Печать R-квадрат для всех моделей, подходящих с lmList но когда я пытаюсь это сделать, я получаю «Ошибка: оператор $ недопустим для атомарных векторов». Я также хотел бы включить его в ту же функцию, если это возможно. Как я могу извлечь R2 для каждой дой таким образом?

#Create MR function for extracting coefficients
getCoef <- function(df) {
  coefs <- lm(y ~ T + P + L + T * L + P * L, data = df)$coef
  names(coefs) <- c("intercept", "T", "P", "L", "T_L", "P_L")
  coefs
}

#Extract coefficients for each doy
coefs.MR_uM <- ddply(MR_uM, ~ doy, getCoef)```

1 Ответ

2 голосов
/ 01 июля 2019

Точка r.squared сохраняется в summary(lm(...)), а не lm(...).Вот еще одна версия вашей функции для извлечения R2:

library(plyr)
df <- iris
#Create MR function for extracting coefficients and R2
getCoef <- function(df) {
        model <- lm(Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width, data = df)
        coefs <- model$coef
        names(coefs) <- c("intercept", "Sepal.Width", "Petal.Length", "Petal.Width")
        R2 <- summary(model)$r.squared
        names(R2) <- c("R2")
        c(coefs, R2)
}
#Extract coefficients and R2 for each Species
coefs.MR_uM <- ddply(df, ~ Species, getCoef)
coefs.MR_uM # output
     Species intercept Sepal.Width Petal.Length Petal.Width        R2
1     setosa  2.351890   0.6548350    0.2375602   0.2521257 0.5751375
2 versicolor  1.895540   0.3868576    0.9083370  -0.6792238 0.6050314
3  virginica  0.699883   0.3303370    0.9455356  -0.1697527 0.7652193

Как рекомендует Parfait, вам не нужно plyr::ddply(), вы можете использовать do.call(rbind, by(df, df$Species, getCoef))

Надеюсь, этопомогает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...