2014-03-06 4 views
3

1 = 동의/0 = 일치하지 않는 여러 질문 (열)이 포함 된 설문 데이터 프레임이 있습니다. 응답자 (행)는 연령대 ("젊은", "중간", "이전"), "지역"("동", "중", "서") 등의 메트릭에 따라 분류됩니다. (3 세, 3 지역, 2 성별, 11 직업 등). 각 측정 항목 내에서 카테고리는 겹치지 않고 크기가 다릅니다. 말에 응답이, 서쪽은 Q15a를 들어, 전체 표본에서 유의 한 차이가있는 경우카테고리와 열을 가로 지르는 카이 제곱 자동화

n<-400 
set.seed(1) 
data<-data.frame(age=sample(c('young','middle','old'),n,replace=T),region=sample(c('East','Mid','West'),n,replace=T),gender=sample(c('M','F'),n,replace=T),Q15a=sample(c(0,1),n,replace=T),Q15b=sample(c(0,1),n,replace=T)) 

내가 함께, 테스트 카이 제곱을 사용할 수 있습니다

은 데이터 세트의 컷 다운 버전을 시뮬레이션 :

attach(data) 
chisq.test(table(subset(data,region=='West')$Q15a),p=table(Q15a),rescale.p=T) 

내가 Q15a의 총 샘플에 대해 모든 범주를 테스트하려면, 다음 ~ 20 개 다른 질문. 문제 당 약 30 건의 테스트가 있기 때문에이를 자동화하는 방법을 찾고 싶습니다. 그러나이 방법 자체를 수행하는 방법이나 카테고리를 순환하는 루프 작성 방법을 찾는 데 어려움을 겪고 있습니다. 필자는 [1]을 검색하여 pairwise.prop.test()와 쌍 비교 테스트를 시도했지만 실제로는 아직 답을 찾지 못했습니다.

[1] 유사하지만 질문 (모두 열 현명한 시험)과 중복되지 :이 방법에 대해

Using loops to do Chi-Square Test in R

Chi Square Analysis using for loop in R

+0

최소한의 재현 가능한 예를 제공하는 것이 가장 좋을 것이라고 생각합니다. http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –

+0

추가 할 질문을 편집했습니다. –

답변

2

를?

# find all question columns containing Q, your "subset" may differ 
nms <- names(data) 
nms <- nms[grepl("Q", nms)] 

result <- sapply(nms, FUN = function(x, data) { 
    qinq <- data[, c("region", x)] 
    by(data = qinq, INDICES = data$region, FUN = function(y, qinq) { 
    chisq.test(table(y[, x]), p = table(qinq[, x]), rescale.p = TRUE) 
    }, qinq = qinq) 
}, data = data, simplify = FALSE) 

$Q15a 
data$region: East 

    Chi-squared test for given probabilities 

data: table(y[, x]) 
X-squared = 0.7494, df = 1, p-value = 0.3867 

--------------------------------------------------------------------------------------------- 
data$region: Mid 

    Chi-squared test for given probabilities 

data: table(y[, x]) 
X-squared = 0.2249, df = 1, p-value = 0.6353 

--------------------------------------------------------------------------------------------- 
data$region: West 

    Chi-squared test for given probabilities 

data: table(y[, x]) 
X-squared = 1.5877, df = 1, p-value = 0.2077 


$Q15b 
data$region: East 

    Chi-squared test for given probabilities 

data: table(y[, x]) 
X-squared = 0.0697, df = 1, p-value = 0.7918 

--------------------------------------------------------------------------------------------- 
data$region: Mid 

    Chi-squared test for given probabilities 

data: table(y[, x]) 
X-squared = 0, df = 1, p-value = 0.9987 

--------------------------------------------------------------------------------------------- 
data$region: West 

    Chi-squared test for given probabilities 

data: table(y[, x]) 
X-squared = 0.056, df = 1, p-value = 0.8129 

원하는 것을 추출 할 수 있습니다. p.value를 추출하는 방법은 다음과 같습니다.

lapply(result, FUN = function(x) lapply(x, "[", "p.value")) 

$Q15a 
$Q15a$East 
$Q15a$East$p.value 
[1] 0.3866613 


$Q15a$Mid 
$Q15a$Mid$p.value 
[1] 0.6353457 


$Q15a$West 
$Q15a$West$p.value 
[1] 0.2076507 



$Q15b 
$Q15b$East 
$Q15b$East$p.value 
[1] 0.7918426 


$Q15b$Mid 
$Q15b$Mid$p.value 
[1] 0.9986924 


$Q15b$West 
$Q15b$West$p.value 
[1] 0.8128969 

해피 서식.

+0

로마인, 답장이 늦어서 죄송합니다. 나는 이것을 해부 할 수 없었지만, 내가 준 df에서 확실히 작동한다. 훌륭한 일. 그것은 내 실제 DF에서 작동하지 않지만 당신의 코드가 아직 어떻게 작동 하는지를 이해하지 못했기 때문에 왜 그런지를 알아 내기 위해 솔루션을 해체하려고 노력하고 있습니다. –

+0

@GrahamJones는 첫 번째 또는 두 번째 익명 함수 안에'debug()'를 삽입하고 코드를 손으로 훑어 가면서 객체와 문장을 검사합니다. http://stackoverflow.com/questions/13663043/exit-current-browser-return-one-level이 도움이 될 수 있습니다. –

1

또한 EnquireR 패키지의 chisq.desc() 함수를 사용할 수도 있습니다. 그것은 나를 위해 잘 일했다. 사용 가능한 지원이 매우 적지 만이 패키지는 꽤 오래되었으므로 (긴 업데이트 없음), 작동하지 않는 함수는 거의 없지만 chisq.desc()가 유용하다는 사실을 알게되었습니다. It 선택한 임계 값에 따라 선택된 모든 범주 형 변수를 교차하여 카이 제곱 검정의 결과가 포함 된 표 셀의 색을 지정합니다. 나는 논평 할 수 없으므로 대답으로 쓰고있다.

관련 문제