2012-01-26 2 views
2

여러 변수가있는 큰 데이터 세트가 있는데, 그 중 하나는 상태 변수이고 각 상태에 대해 1-50로 코드화되어 있습니다. 나는 데이터 집합의 나머지 27 개 변수 (총 55 개 변수가 있음)에 대해 28 개 변수의 회귀 분석을 실행하고 각 상태에 대해 구체적으로 실행하고 싶습니다.R 회피 명령을 통한 다중 회귀에서 회귀 계수를 추출하십시오.

즉, 상태 == 1 인 관측치의 경우 covariate1, covariate2, ..., covariate27에서 variable1의 회귀 분석을 실행하십시오. 나는이 상태를 2-50 상태에서 variable1에 대해 반복하고 싶다. 그리고 variable2, variable3, ..., variable28에 대한 전체 과정을 반복한다.

나는 이것을하기 위해 올바른 R 코드를 작성했다고 생각하지만 다음으로는 계수를 추출하여 계수 행렬에 넣는 것이 좋습니다. 누군가가 이걸 도와 주시겠습니까?

for (num in 1:50) { 

    #PUF is the data set I'm using 

    #Subset the data by states 
    PUFnum <- subset(PUF, state==num) 

    #Attach data set with state specific data 
    attach(PUFnum) 

    #Run our prediction regression 
    #the variables class1 through e19700 are the 27 covariates I want to use 
    regression <- lapply(PUFnum, function(z) lm(z ~ class1+class2+class3+class4+class5+class6+class7+ 
                xtot+e00200+e00300+e00600+e00900+e01000+p04470+e04800+ 
                e09600+e07180+e07220+e07260+e06500+e10300+ 
                e59720+e11900+e18425+e18450+e18500+e19700)) 

    Beta <- lapply(regression, function(d) d<- coef(regression$d)) 


    detach(PUFnum) 
} 

답변

1

나는 약간 코드 정리했습니다 :

당신이 원하는 경우
fm <- z ~ class1+class2+class3+class4+class5+class6+class7+ 
      xtot+e00200+e00300+e00600+e00900+e01000+p04470+e04800+ 
      e09600+e07180+e07220+e07260+e06500+e10300+ 
      e59720+e11900+e18425+e18450+e18500+e19700 

PUFsplit <- split(PUF, PUF$state) 
mod <- lapply(PUFsplit, function(z) lm(fm, data=z)) 

Beta <- sapply(mod, coef) 

, 당신도 모두 한 줄에 넣고 수 :

을 여기에 지금까지 작성한 코드의
Beta <- sapply(lapply(split(PUF, PUF$state), function(z) lm(fm, data=z)), coef) 
5

이것은 Split-Apply-Combine이라는 고전적인 문제의 또 다른 예이며 @hadley의 plyr 패키지를 사용하여 해결할 수 있습니다. 문제, 당신은 국가에 의해

  1. 분할 데이터 프레임에
  2. 데이터 프레임에 계수를 결합 각 부분 집합에 대한 회귀 분석을 적용 할 수 있습니다.

Cars93 데이터 세트는 MASS 라이브러리에서 사용할 수 있습니다. 국가의 origin을 기준으로 horsepowerenginesize 사이의 관계를 파악하는 데 관심이 있습니다.

# LOAD LIBRARIES 
require(MASS); require(plyr) 

# SPLIT-APPLY-COMBINE 
regressions <- dlply(Cars93, .(Origin), lm, formula = Horsepower ~ EngineSize) 
coefs <- ldply(regressions, coef) 

    Origin (Intercept) EngineSize 
1  USA 33.13666 37.29919 
2 non-USA 15.68747 55.39211 

EDIT. 예를 들어 Cars93의 경우 PUF, Origin의 경우 state

의 경우는 fm으로 대체하십시오.
관련 문제