2013-07-11 3 views
0

후 내 오류를 다시 장난감 예제를 포함했다 :R 매칭 dataframe 전과 누락 된 값으로 회귀하고 일부 회귀

data(cars) 
cars$dist[cars$dist<5]<-NA 
cars$fast<- (cars$speed>10)*1 

fit<-lm(speed~dist,cars) 


cl <- function(dat,fm, cluster){ 
    require(sandwich, quietly = TRUE) 
    require(lmtest, quietly = TRUE) 
    M <- length(unique(cluster)) 
    N <- length(cluster) 
    K <- fm$rank 
    dfc <- (M/(M-1))*((N-1)/(N-K)) 
    uj <- apply(estfun(fm),2, function(x) tapply(x, cluster, sum)); 
    vcovCL <- dfc*sandwich(fm, meat=crossprod(uj)/N) 
    result<-coeftest(fm, vcovCL) 
    return(result)} 

cl(cars,fit,cars$fast) 

Error in tapply(x, cluster, sum) : arguments must have same length 

문제는 원래 dataframe가 regresssion에 사용되는 dataframe보다 큰 것입니다 제거 된 NA 및 하위 집합 회귀로 인해 강력한 표준 오류를 계산할 필요가 있으므로 함수를 사용하여 SE를 계산해야하지만, 제거 된 적절한 NAs를 식별하여 데이터 프레임과 함께 사용할 올바른 클러스터를 식별 할 수있는 방법은 무엇입니까?

미리 감사드립니다.

+0

내가 문의 바랍니다이 좋아한다? –

+0

당신이 맞습니다, 나는 그것을 제거해야합니다. 클러스터는 회귀 분석에 사용 된 데이터 프레임과 일치하는 벡터입니다. – mumpy

답변

2

당신은 당신의 데이터를 NAS를 indentify 할 수 있지만,이 경우이 정보에 액세스하기 위해 더 나은 방법을 가리키는 위해 @Dwin하는 NA의 (감사를 처리하는 방식에 lm 개체의 정보를 사용하는 것이 더 좋을 것 complete.cases을 사용할 수 있습니다 더 일반적으로이 답변을 단순화하는 방법). 당신은`cl` 기능을 참조하지 않기 때문에 인수 목록에서 "날엔"왜

data(cars) 
cars$dist 
cars$dist[cars$dist < 5] <- NA 
cars$fast<- (cars$speed > 10) * 1 
which(!complete.cases(cars)) 
## [1] 1 3 

fit <- lm(speed ~ dist, data = cars) 
fit$na.action 
## 1 3 
## 1 3 
## attr(,"class") 
## [1] "omit" 

따라서, 최종 기능은

cl <- function(fm, cluster){ 
    require(sandwich, quietly = TRUE) 
    require(lmtest, quietly = TRUE) 
    M <- length(unique(cluster)) 
    N <- length(cluster) 
    K <- fm$rank 
    dfc <- (M/(M-1))*((N-1)/(N-K)) 
    uj <- apply(estfun(fm),2, function(x) tapply(x, cluster[-fm$na.action], sum)); 
    vcovCL <- dfc*sandwich(fm, meat=crossprod(uj)/N) 
    result<-coeftest(fm, vcovCL) 
    result} 

cl(fit,cars$fast) 
## t test of coefficients: 

##    Estimate Std. Error t value Pr(>|t|) 
## (Intercept) 8.8424  2.9371 3.01 0.00422 
## dist   0.1561  0.0426 3.67 0.00063 
+0

"double negative"대신에 단지'cluster [complete.cases (dat)]'를 사용할 수 있지만, 나의 선호는'cluster [-fit $ na.action]'벡터를 사용하는 것입니다. –

+0

@DWin 이것은 많은 것들을 단순화합니다 ... – dickoa

+0

먼저 도움을 주셔서 감사합니다! 내 질문에 실수를 저질렀다. 누락 (NA)이 회귀에서 데이터 프레임이 더 작은 유일한 소스는 아니라고 생각합니다. 나의 회귀의 일부는 회귀 분석이다. 그래서 내 제안 된 솔루션은 동일한 하위 집합 매개 변수를 사용하여 원래 데이터 프레임을 부분 집합하고 회귀를 수행하는 것입니다. 이 일을 더 우아한 방법이 있습니까? – mumpy