[英]Extract Group Regression Coefficients in R w/ PLYR
我正在嘗試為我的數據集中的每個郵政編碼運行回歸並將系數保存到數據框但我遇到了麻煩。
每當我運行下面的代碼時,我得到一個稱為“系數”的數據框,其中包含每個郵政編碼,但每個郵政編碼的截距和系數等於簡單回歸lm(Sealed$hhincome ~ Sealed$square_footage)
的結果lm(Sealed$hhincome ~ Sealed$square_footage)
。
當我在下面的鏈接中運行Ranmath示例中指示的代碼時,一切都按預期工作。 經過STATA多年后我是R的新手,所以任何幫助都會非常感激:)
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)
因為dlply
采用了一個允許將額外參數傳遞給函數的...
參數,所以你可以使事情變得更簡單:
dlply(Sealed,.(zipcode),lm,formula=hhincome~square_footage)
lm
的前兩個參數是formula
和data
。 由於此處指定了formula
,因此lm
將獲取它給出的下一個參數(相關的特定於郵政編碼的Sealed
塊)作為data
參數...
您正在應用該功能:
x <- function(df) {
lm(Sealed$hhincome ~ Sealed$square_footage)
}
對於數據的每個子集,因此我們不應對每次輸出的確切結果感到驚訝
lm(Sealed$hhincome ~ Sealed$square_footage)
對? 嘗試用函數中的df
替換Sealed
。 這樣你就是指傳遞給函數的每個單獨變量中的變量,而不是Sealed
數據框中的整個變量。
問題不plyr
,而在於函數的定義。 你正在調用一個函數,但沒有對變量做任何事情。
作為類比,
myFun <- function(x) {
3 * 7
}
> myFun(2)
[1] 21
> myFun(578)
[1] 21
如果你在x的不同值上運行這個函數,它仍然會給你21,無論x是什么。 也就是說,函數中沒有x的引用。 在我愚蠢的例子中,修正是顯而易見的; 在你上面的函數中,混淆是可以理解的。 $hhincome
和$square_footage
應該可以作為變量。
但是你希望你的x在$
之前變化。 正如@Joran正確指出的那樣,交換sealed$hhincome
與df$hhincome
(同樣為$squ..
)這將有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.