2017-12-21 3 views
0

나는 열 테마 (값 0 또는 1), 수준 (9 값 1) startTime을 (double 값)와 데이터베이스를 가지고있다. 모든 레벨에서 startTime 값에 대해 t- 테스트를 수행하려고합니다. 여기 내 코드는 다음과 같습니다.for 루프에서 동일한 t-test를 수행하는 방법은 무엇입니까?

database <- read.csv("database.csv") 
themeData <- database[database$theme == 1, ] 
noThemeData <- database[database$theme == 0, ] 

for (i in 1:9) { 
    x <- themeData[themeData$level == i, ] 
    y <- noThemeData[noThemeData$level == i, ] 
    t.test(x$startTime,y$startTime, 
     alternative = "less") 
} 

불행히도 t- 테스트는 실행되지 않습니다. 결국 x와 y는 i = 9의 값을 얻습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 그것은 t.test의 계산을 수행하지만, for 때문에 루프는 항상 묵시적 결과, 당신은 어디에도 저장되지 않습니다 폐기 :

+0

지금은 루프에서 아무 것도하지 않습니다. 결과를 인쇄하고 싶습니까? 그런 다음 루프에서 이렇게합니다 :'print (t.test (...))' – MrFlick

답변

4

코드는 바쁜 업무를하고있다. 당신은 벡터 또는 목록을 사용했을 것이다과 같이 (항상 낫다 사전 할당) : 그것은에 대한 list에서 모든 테스트 "결과 개체를"저장된다는 점에서

res <- replicate(9, NULL) 
for (i in 1:9) { 
    x <- themeData[themeData$level == i, ] 
    y <- noThemeData[noThemeData$level == i, ] 
    res[[i]] <- t.test(x$startTime,y$startTime, 
        alternative = "less") 
} 
res[[2]] 

이 "충분"할 수있다 나중에 처리/소비. 약간 더 나은 방법은 *apply 함수 중 하나를 사용하는 것입니다. 내가 생각하는 처음 두 가지는 여기에 직접 적용 할 수 있습니다 (lapply, sapply(..., simplify=FALSE))는 솔직하게 어느 쪽이든 선택할 수있는 다양한 사소한 장점이 있습니다. (여기와는 달리) 검사 시간이 오래 걸릴 경우

res <- lapply(c(4, 6, 8), function(thiscyl) { 
    am0 <- subset(mtcars, am == 0 & cyl == thiscyl) 
    am1 <- subset(mtcars, am == 1 & cyl == thiscyl) 
    t.test(am0$mpg, am1$mpg) 
}) 

이 특히 도움이됩니다 : 당신이 테스트 을 수행하고 모델를 유지, 그래서 수 있도록 테스트를 다시 실행하지 않고 결과에 많은 것들 .

sapply(res, `[`, "p.value") 
# $p.value 
# [1] 0.01801712 
# $p.value 
# [1] 0.187123 
# $p.value 
# [1] 0.7038727 

이상의 간결 :

sapply(res, `[[`, "p.value") 
# [1] 0.01801712 0.18712303 0.70387268 

또 다른 예를 들어, 신뢰 구간, 매트릭스 :

t(sapply(res, `[[`, "conf.int")) 
#   [,1]  [,2] 
# [1,] -9.8 -1.117892 
# [2,] -3.916068 1.032735 
# [3,] -2.339549 1.639549 

당신이 할 수있는 예를 들어, 당신은 단지 P-값을 원했다 예를 들어 res[[2]]과 같이 하나의 모델을 항상보아야하지만 모두 볼 필요가 있다면 res을 사용하고 전체 영역을 볼 수 있습니다.

res[[2]] 
# Welch Two Sample t-test 
# data: am0$mpg and am1$mpg 
# t = -1.5606, df = 4.4055, p-value = 0.1871 
# alternative hypothesis: true difference in means is not equal to 0 
# 95 percent confidence interval: 
# -3.916068 1.032735 
# sample estimates: 
# mean of x mean of y 
# 19.12500 20.56667 
관련 문제