【问题标题】:Extracting a list of R2 from within lm() based on variable in multiple regression in R基于R中多元回归中的变量从lm()中提取R2列表
【发布时间】:2019-07-01 14:34:44
【问题描述】:

我已经使用 lm() 对 R 中的数据集执行了多元回归分析,并且能够使用以下函数提取一年中每一天的系数。我还想为一年中的每一天提取 R2,但这似乎并没有以同样的方式工作。

这与以下问题几乎相同: Print R-squared for all of the models fit with lmList 但是当我尝试这个时,我得到“错误:$ 运算符对原子向量无效”。如果可能的话,我还想将它包含在相同的功能中。如何以这种方式提取每个 doy 的 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)```

【问题讨论】:

  • 您在哪里尝试提取 R2?

标签: r regression


【解决方案1】:

重点是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))

希望这会有所帮助!

【讨论】:

  • 而且您不需要软件包,因为by + do.call 可以产生类似的(矩阵)结果:do.call(rbind, by(df, df$Species, getCoef))
  • 谢谢@ANG。正是我想要的。
猜你喜欢
  • 2021-11-14
  • 2020-03-21
  • 2018-07-13
  • 2019-08-08
  • 2015-06-21
  • 2014-02-14
  • 1970-01-01
  • 1970-01-01
  • 2015-05-24
相关资源
最近更新 更多