2012-04-18 2 views
3

저는 각 lm 객체의 계수와 표준 오차를 추출하여 누락 된 예측자를 위해 NA 채우기를 사용하여 data.frame으로 결합하는 것을 좋아합니다.불균등 한 오브젝트 길이의리스트를 데이터 프레임에 결합하는 방법은 무엇입니까?

set.seed(12345) 
    x<-matrix(rnorm(1000),nrow=100,ncol=10) 
    colnames(x)<-paste("x",1:10,sep="") 
    df<-data.frame(y=rnorm(100),x) 
    m1<-vector('list', 10) 
    for (i in 2:11){ 
    eqn <- as.formula(paste("y ~", paste(colnames(df)[2:i], collapse='+'))) 
    m1[[i-1]] <- lm(eqn, df) 
    } 

모든 의견을 보내 주시면 감사하겠습니다.

답변

9

이 트릭을 수행해야합니다

cList <- lapply(m1, coef) 
nms <- names(cList[[11]]) 

cMat <- do.call(rbind, lapply(cList, function(X) X[nms])) 
cDF <- as.data.frame(cMat); names(cDF) <- nms # Pretty up the results 

cDF[1:5, 1:6] 
# (Intercept)  x1   x2   x3   x4  x5 
# 1 -0.2345084 0.2027485   NA   NA   NA  NA 
# 2 -0.2334043 0.2074812 -0.05006297   NA   NA  NA 
# 3 -0.2299977 0.2099620 -0.03892985 0.09777829   NA  NA 
# 4 -0.2095798 0.2221179 -0.02710201 0.06403695 -0.1184191  NA 
# 5 -0.2060406 0.2180674 -0.01062671 0.06632922 -0.1045128 0.130937 

편집 :

여기
seList <- lapply(m1, function(X) coef(summary(X))[,2]) 
seMat <- do.call(rbind, lapply(cList, function(X) X[nms])) 
seDF <- as.data.frame(cMat); names(seDF) <- nms 
+0

감사합니다. Josh. 표준 오류 및 열 x2 ~ x10의 이름이 누락되었습니다. – Tony

+0

@ 토니 - 천만에. 이제 방금 열 이름을 추가하고 유사한 data.frame에서 표준 오류를 수집하는 방법을 보여주는 해답을 편집했습니다. –

+0

좋습니다! 코드는 계수를 추출하는 데는 잘 작동하지만 표준 오류를 추출하는 데는 적합하지 않습니다. seList 뒤에 다음과 같은 메시지가 나타납니다. "객체 $ coefficients의 오류 : 원자 벡터에 대한 $ 연산자가 유효하지 않습니다." – Tony

1

은 다음과 같습니다

그냥 같은 것을 할, 유사한 구조로 표준 오차를 수집하기를 mergeReduce을 사용하는 접근 방식 :

m2 <- lapply(m1[-1], function(x) as.data.frame(coef(summary(x)))) 

tmpfun <- function(x,y) { 
    n <- as.character(nrow(y)-1) 
    xn <- if('Row.names' %in% colnames(x)) 1 else 0 
    merge(x,y,by.x=xn, by.y=0, suffixes=c('',n), all=TRUE) 
} 

out <- Reduce(tmpfun, m2) 

열을 재정렬하거나 m2의 일부 열을 제거하거나 결과를 조 변경 할 수 있습니다.

+0

매우 컴팩트합니다. 아직 Reduce를 사용하지는 않았지만 나중에 사용하려고합니다. 감사합니다. – Tony

관련 문제