2016-09-02 2 views
-1

저는 R에서 일하기 시작한 의사이며이 질문에 대한 도움을 주신 의사입니다 : 변수 나이 (연속)가있는 2 개의 테이블 (A, B) , 성 (이진) 및 test_value (이진). 각 테이블에는 나이와 성별이 다릅니다.다른 변수에 따라 테이블을 샘플링

set.seed(10) 
AgeA <- round(rnorm(100, mean = 40, sd = 15)) 
SexA <- sample(c("M","F"), 100, replace = TRUE, prob = c(0.5, 0.5)) 
Test_ValueA <- rbinom(100, 1, 0.3) 

set.seed(20) 
AgeB <- round(rnorm(1000, mean = 50, sd = 15)) 
SexB <- sample(c("M","F"), 1000, replace = TRUE, prob = c(0.5, 0.5)) 
Test_ValueB <- rbinom(1000, 1, 0.4) 

A <- data.frame(Age = AgeA, Sex = SexA, Test = Test_ValueA) 
B <- data.frame(Age = AgeB, Sex = SexB, Test = Test_ValueB) 

genderA<-(prop.table(table(A[,2]))) 
TestA<-(prop.table(table(A[,3]))) 
paste("median age in group A is",median(A[,1]), "percentage female in group A is",genderA[1], "percentage of test positive in A is", TestA[2]) 

genderB<-(prop.table(table(B[,2]))) 
TestB<-(prop.table(table(B[,3]))) 
paste("median age in group A is",median(B[,1]), "percentage female in group B is",genderB[1], "percentage of test positive in A is", TestB[2]) 

테스트 비율의 차이는 이제 연령과 성별로 혼란 스럽습니다. 지금은 나이와 성별을 조정하기 위해 테이블 ​​A의 환자와 테이블 B를 일치시키고 싶습니다. B가 더 작은 집단이기 때문에 나는 A에서 표본 추출을하고 B와 일치하는 것을 선호 할 것입니다. 일치하는 패키지는 옵션입니까? 다른 아이디어

잘만되면 나는 나의 문제를 설명 할 수 있었다. 이 기능이 가리킬 수있는 힌트가 있습니까?

library(dplyr) 

Bsummary <- group_by(B,Sex) 

Bsummary <- summarise(Bsummary, PercenteagePositive = sum(Test == 1)/length(Test == 1), PercenteageSex = n()/100) 

Bsummary 

경우 :

+0

에 오신 것을 환영합니다을 갈 수 싶어합니다. [(1)] (http://stackoverflow.com/help/how-to-ask)를 읽으십시오. 좋은 질문 [[2] (http://stackoverflow.com/help/mcve) [(3)] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example#answer-5963610)뿐만 아니라 MCVE를 만드는 방법 R. – Christoph

답변

0

안녕하세요 난 당신이 인구 B 매개 변수를 요약 할 수 dplyr 사용하여 다음

set.seed(10) 
AgeA <- rnorm(100, mean = 30, sd = 10) 
#population A is 0.8 percent male 
SexA <- sample(c("M","F"), 100, replace = TRUE, prob = c(0.5, 0.5)) 
Test_ValueA <- rbinom(100, 1, 0.5) 

set.seed(20) 
AgeB <- rnorm(100, mean = 30, sd = 10) 
#population B is 0.8 percent male 
SexB <- sample(c("M","F"), 100, replace = TRUE, prob = c(0.8, 0.2)) 
Test_ValueB <- rbinom(100, 1, 0.3) 

A <- data.frame(Age = AgeA, Sex = SexA, Test = Test_ValueA) 
B <- data.frame(Age = AgeB, Sex = SexB, Test = Test_ValueB) 

말했다 가능한 대답은, 나는 특성을 가진 100 명 두 집단을 구축 할 것입니다있다 이 B의 결과는 76 % 남성과 24 % 여성입니다. A에서 20 명을 샘플링하면 남성 15 명과 여성 5 명이 샘플링되어야합니다. 먼저 남성과 여성에의 인구를 분리 : 다음

SampleAMale <- Amale[sample(nrow(Amale), 15), ] 

SampleAFemale <-Afemale[sample(nrow(Afemale), 5), ] 

그들과 합류하고 그들에게

sampleA <- rbind(SampleAMale, SampleAFemale) 

ASampleSummary <- group_by(sampleA,Sex) 

ASampleSummary <- summarise(ASampleSummary, PercenteagePositive = sum(Test == 1)/length(Test == 1), PercenteageSex = n()/100) 
을 요약 할 수 있습니다 :

Amale <- filter(A, Sex == "M") 
Afemale <- filter(A, Sex == "F") 

그리고 당신은 15 명의 남성과 5 명의 여성을 샘플링 것을에서

+0

에서 최소한의 재생산 가능한 예는 섹스를 위해 매우 우아한 방법입니다! 나이에 따라뿐만 아니라 연령에 따라 샘플을보고 싶습니다. 30 세 여성, 23 세 남성 등의 분포가 정확히 같습니까? – fank

+0

@fank 안녕하세요, 제가 할 수 있다고 생각합니다. 그러나 나는 공변량으로 나이를 사용하는 것이 더 좋을 것이라고 생각합니다. 대답을하려고하는 질문을 말해 줄 수 있습니까? 나는 너를 도울 수 있을지도 모르지만 너는 그렇게 할 필요가 없을 것 같아.원하는 경우, 내 전자 메일을 보낼 수 있습니다 –

+0

나는 3 그룹 (피셔의 정확한 테스트)과 그 이후의 그룹 A-C, A-B 및 B-C 간의 하위 그룹 분석에서 이진 결과 test_value를 비교하려고합니다. B와 C는 표본 크기가 제한된 제 연구 집단이지만 A는 큰 집단입니다. 어쨌든 나이와 성별을 조정할 수 있습니까? – fank

0

좋아요. Fank이 답변을 조금 더 좋게 생각합니다. 첫 번째 부분은 동일합니다. 예를 들어, 해당 연도가 만료 된 것으로 간주됩니다.

set.seed(10) 
AgeA <- round(rnorm(100, mean = 30, sd = 2)) 
#population A is 0.8 percent male 
SexA <- sample(c("M","F"), 100, replace = TRUE, prob = c(0.5, 0.5)) 
Test_ValueA <- rbinom(100, 1, 0.5) 

set.seed(20) 
AgeB <- round(rnorm(100, mean = 30, sd = 2)) 
#population B is 0.8 percent male 
SexB <- sample(c("M","F"), 100, replace = TRUE, prob = c(0.8, 0.2)) 
Test_ValueB <- rbinom(100, 1, 0.3) 

A <- data.frame(Age = AgeA, Sex = SexA, Test = Test_ValueA) 
B <- data.frame(Age = AgeB, Sex = SexB, Test = Test_ValueB) 

이제 prop.table을 사용하여 인구의 비율을 알 수 있습니다. A와 같은 비율로 B에서 1000 명의 샘플을 샘플링하고 AGE와 SEX로 샘플링하려고한다고 가정 해 보겠습니다.

1000*(prop.table(table(A[,1:2]))) 

다음 필터를 적용하여 그룹 내에서 샘플링 할 수있다 :

을 예를 들어, 당신은 단지 그룹 B에서 남성 30 세 당신이 SO

BMale30 <- filter(B, Sex == "M" & Age == 30) 
+0

안녕하세요. 매우 유용하며 초기 질문을 개선하는 데 많은 도움이되었습니다 (위 참조). 경기 패키지가 연령과 성별에 맞게 조정할 것이라고 생각합니까? 나는 당신이 제안한대로 필터를 최종 단계로 사용하는 방법을 조금 확신하지 못한다. 지금까지 큰 도움을 주셔서 대단히 감사합니다! – fank

+0

안녕하세요, fank, 당신은 필터와 같은 것을 할 수 있습니다 : Amale30 <-filter (A, Sex == "M"& Age == 30) 각 연령대에 대해, 피셔의 정확한 테스트와 Chi square test 같은 그룹 간의 차이점을 살펴볼 것입니다. 그룹을 평등하게 만들 필요가 있는지 확실하지 않습니다. 이 링크 https://cran.r-project.org/web/packages/vcdExtra/vignettes/vcd-tutorial.pdf를 보시기 바랍니다. 귀하가 경기보다 더 많은 도움이 될 것이라고 생각합니다. 나는 너를 필요로하면 돕기 위해 여기있다. –

관련 문제