2012-11-15 33 views
3

我試圖對我的數據集中的每個郵編運行迴歸,並將係數保存到數據框但我遇到了問題。R/PLYR中提取羣體迴歸係數

每當運行下面的代碼,我得到所謂的「係數」含有每郵政編碼但與截距和係數爲每一個拉鍊碼等於簡單迴歸lm(Sealed$hhincome ~ Sealed$square_footage)的結果的數據幀。

當我按照Ranmath的例子在下面的鏈接中運行代碼時,一切都按預期工作。我是新來後R多年STATA,所以任何幫助,將不勝感激:)

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) 

回答

2

要應用的功能:

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

到的每個子集您的數據,所以我們不應該感到驚訝,每次輸出都是正確的

lm(Sealed$hhincome ~ Sealed$square_footage) 

rig H T?嘗試在您的功能中用df代替Sealed。這樣,你指的是傳遞給函數的每個單獨片段中的變量,而不是數據框Sealed中的全部變量。

+0

感謝Joran,這是真正的幫助!它應該肯定可以幫助我解決其他R功能問題 – Patrick

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..相同)交換,這將有所幫助。

+0

裏卡多這個非常具有說明性的例子讓我對這個問題更加清楚;我的功能是從第一行列出的相關變量中抽象出來的。謝謝! – Patrick

3

因爲dlply需要...參數,可額外參數傳遞給函數,可以讓事情更簡單:

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

前兩個參數lmformuladata。由於這裏指定formulalm會拿起一個參數是給定的(的Sealed有關特定郵政編碼-塊)作爲data參數...