【问题标题】:Extract Group Regression Coefficients in R w/ PLYR在 R w/ PLYR 中提取组回归系数
【发布时间】:2012-11-15 22:28:01
【问题描述】:

我正在尝试对数据集中的每个邮政编码运行回归并将系数保存到数据框中,但我遇到了麻烦。

每当我运行下面的代码时,我都会得到一个名为“coefficients”的数据框,其中包含每个邮政编码,但每个邮政编码的截距和系数等于简单回归 lm(Sealed$hhincome ~ Sealed$square_footage) 的结果。

当我运行下面链接中 Ranmath 示例中所示的代码时,一切都按预期运行。在使用 STATA 多年后,我是 R 新手,因此将不胜感激任何帮助:)

R extract regression coefficients from multiply regression via lapply command

library(plyr)
Sealed <- read.csv("~/Desktop/SEALED.csv")

x <- function(df) {
      lm(Sealed$hhincome ~ Sealed$square_footage)
}

regressions <- dlply(Sealed, .(Sealed$zipcode), x)
coefficients <- ldply(regressions, coef)

【问题讨论】:

    标签: r plyr


    【解决方案1】:

    因为dlply 采用... 参数,允许将其他参数传递给函数,您可以让事情变得更简单:

    dlply(Sealed,.(zipcode),lm,formula=hhincome~square_footage)
    

    lm 的前两个参数是 formuladata。由于此处指定了formulalm 将选取它给出的下一个参数(Sealed 的相关邮政编码特定块)作为data 参数...

    【讨论】:

      【解决方案2】:

      您正在应用该功能:

      x <- function(df) {
            lm(Sealed$hhincome ~ Sealed$square_footage)
      }
      

      到您数据的每个子集,所以我们不应该对每次输出都是准确的感到惊讶

      lm(Sealed$hhincome ~ Sealed$square_footage)
      

      对吗?尝试在您的函数中将Sealed 替换为df。这样,您指的是传递给函数的每个单独片段中的变量,而不是数据框中 Sealed 中的整个变量。

      【讨论】:

      • 谢谢乔兰,这真的很有帮助!它肯定也可以帮助我处理其他 R 函数
      【解决方案3】:

      问题不在于plyr,而在于函数的定义。您正在调用一个函数,但没有对变量做任何事情。

      打个比方,

       myFun <- function(x) {
          3 * 7
        }
      
          >  myFun(2)
          [1] 21
          >  myFun(578)
          [1] 21
      

      如果你在不同的 x 值上运行这个函数,它仍然会给你 21,不管 x 是什么。也就是说,函数中没有对 x 的引用。在我这个愚蠢的例子中,修正是显而易见的;在您上面的功能中,混淆是可以理解的。 $hhincome$square_footage 应该可以作为变量。

      但您希望您的 x 与 $ 之前的内容有所不同。正如@Joran 正确指出的那样,将sealed$hhincomedf$hhincome 交换(对于$squ.. 也是如此),这将有所帮助。

      【讨论】:

      • 非常说明性的例子里卡多,让我更清楚这个问题;我的函数是从第一行中列出的相关变量中抽象出来的。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-19
      • 1970-01-01
      • 2019-08-08
      • 1970-01-01
      • 2011-09-28
      • 1970-01-01
      相关资源
      最近更新 更多