3

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

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

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

R通过lapply命令从乘法回归中提取回归系数

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)
4

3 回答 3

3

因为dlply接受一个...允许将其他参数传递给函数的参数,所以您可以使事情变得更简单:

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

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

于 2012-11-16T02:41:13.497 回答
2

您正在应用该功能:

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

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

lm(Sealed$hhincome ~ Sealed$square_footage)

正确的?尝试在你的函数内部Sealed替换。df这样,您指的是传递给函数的每个单独片段中的变量,而不是 data frame 中的整个变量Sealed

于 2012-11-15T22:45:37.577 回答
1

问题不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..)交换,这将有所帮助。

于 2012-11-15T23:27:44.993 回答