2017-01-04 5 views
3

내 질문은 합리적으로 쉽게 교차 팩터, 중첩과 관련된 표준 실험 디자인을 무작위로 만드는 기능을 제공하는 R 패키지 여부입니다/또는 차단. 구체성에 대한분할 플롯 (및 다른 클래식 디자인) Randomizing R

NLME 패키지에 데이터 세트로 제공되는 Oats 실험의 새로운 무작위를 생성하는 방법을 구체적으로 나에게 보여줍니다.

> data(Oats, package="nlme") 
> summary(Oats) 
Block   Variety  nitro   yield  
VI :12 Golden Rain:24 Min. :0.00 Min. : 53.0 
V :12 Marvellous :24 1st Qu.:0.15 1st Qu.: 86.0 
III:12 Victory :24 Median :0.30 Median :102.5 
IV :12     Mean :0.30 Mean :104.0 
II :12     3rd Qu.:0.45 3rd Qu.:121.2 
I :12     Max. :0.60 Max. :174.0 

이 실험에는 6 개의 블록이있다. 각 블록은 다양성에 무작위로 할당 된 3 개의 플롯으로 나뉘어져 있습니다 (각 블록의 다양성 당 하나의 플롯, 각 블록을 개별적으로 무작위로 추출). 각 플롯은 4 개의 서브 플롯으로 세분되며 4 개의 양의 질소 (0, 0.2, 0.4 및 0.6)에 무작위로 할당되며 각 플롯에서 개별적으로 무작위 배정 된 니트로 레벨 당 하나의 서브 플롯. 데이터 세트에서 플롯은 BlockVariety의 조합으로 식별 할 수 있습니다. (응답 변수는 yield, 그래서 그건 정말 치료 디자인의 일부가 아닙니다.)

두 번째 질문 : 당신이 Oats를 무작위 수 있습니다 감안할 때, 당신은 쉽게 다른 고전적인 디자인을 무작위 동일한 패키지를 사용할 수 있습니다, 예를 들면, 3 ~ factor CRD, 중첩 된 디자인, 3-period 크로스 오버 디자인, 또는 5x5 Graeco-Latin square?

저는 실제로 이미 R 언어에서 기본 함수를 사용하여이를 수행하는 방법을 알고 있습니다. 그래서 프로그래밍 방식의 답변을 보는 데 특히 관심이 없습니다. 나는 어떤 기존 패키지이 이것을 쉽게 만들 것인지 알고 싶다. randomizeRrandomizr과 같은 몇 가지 패키지를 확인할 수 있습니다. 그러나 이것들에 대한 설명서를 빨리 ​​읽으 므로써 어떻게하는지 분명하지 않습니다.

나는 학생용으로 몇 년 전에 개발 한 범용 무작위 추출 패키지의 장점을 가지고 있으며, CRAN에서 더 많이 개발할지 여부를 결정하려고합니다.

+0

나는이 질문에 몇몇 사람들에 의해 오프 주제로 간주 될 때 "닫기"표가있는 것을 볼이 작업을 수행하는 또 다른 방법입니다. 나는 그것이 프로그래밍에 관한 것이라고 생각했지만, CrossValidated 대신에 그것을 넣어야한다고 나는 맞습니까? 나는 이것을 가져 가서 옮길 수있다. – rvl

+0

코드/패키지를 묻는 질문은 [stats.SE]에서 주제와 관련이 없습니다. 이 질문은 주제에서 벗어날 것입니다. 그것은 나에게 코딩 질문으로 보입니다, 그래서 나는 그것이 주제에있을 것이라고 생각할 것입니다, 그러나 확실히 거기에 없을 것입니다. – gung

답변

2

내가 randomizr와 함께 할 것입니다 방법은 다음과 같습니다

data(Oats, package="nlme") 

# get the latest version from github  
install.packages("devtools") 
devtools::install_github("DeclareDesign/randomizr") 

library(randomizr) 
Oats <- within(Oats,{ 
    Variety_new <- block_ra(block_var = Block, 
          condition_names = c("Golden Rain", "Marvellous", "Victory")) 
    nitro_new <- block_ra(block_var = paste0(Block, Variety_new), 
         condition_names = c(0, 0.2, 0.4, 0.6)) 
    }) 

# Original Random Assignment 
with(Oats, table(Block, Variety)) 
with(Oats, table(Block, nitro)) 
with(Oats, table(Block, nitro, Variety)) 

# New Random Assignment 
with(Oats, table(Block, Variety_new)) 
with(Oats, table(Block, nitro_new)) 
with(Oats, table(Block, nitro_new, Variety_new)) 

열쇠는 당신이 니트로 조건으로 줄거리를 랜덤 모두 다양성과 블록에 차단해야 실현하는 것입니다. (그 때문에 우리는 paste0으로 전화해야합니다).

EDIT 여기

은 (주석 참조)

library(randomizr) 
des <- rev(expand.grid(subplot=1:4, wholeplot=1:3, block=1:6)) 
des <- within(des,{ 
    plot_id <- paste0(block, "_", wholeplot) 
    Variety <- block_and_cluster_ra(
       block_var = block, 
       clust_var = plot_id, 
       condition_names = c("Golden Rain", "Marvellous", "Victory")) 
    nitro <- block_ra(block_var = plot_id, 
        condition_names = c(0, 0.2, 0.4, 0.6)) 
}) 

with(des, table(Variety, block)) 
with(des, table(Variety, nitro)) 
with(des, table(Variety, nitro, block)) 
+0

정말 유망 해 보였지만, 시도했을 때'Variety_new' 및'nitro_new' 열의 모든 요소에 대해 () (코드에서 두 번째 테이블 집합에 대해 0을 계산합니다). 지정한대로 github에서 설치했으며 패키지 버전은 0.5.0입니다. --- 최신 커밋은 CRAN (0.4.1)에 되돌려 졌을 때 무언가를 깨뜨렸을 것입니다. 응답 해 주셔서 감사합니다. 누군가가 그 문제를 이해 한 사람이 나오기까지 4 개월이 걸렸습니다. – rvl

+0

죄송합니다! 업데이트 도중 우리를 붙잡 았을 지 모릅니다. 버전 0.6.0 github에 (그리고 CRAN에 의해 ​​받아 들여지지만 바이너리를 위해 며칠 걸립니다 ...) –

+0

미안 할 필요가 없습니다! 기스 ub은 축복이자 저주입니다. 최신 개발을 즉각적으로 이용할 수있는 축복입니다. 최신 오류를 즉시 사용할 수 있도록 저주합니다. – rvl

-1

optBlock 분할에 대한 무작위 계획을 만드는 데 사용할 수 있습니다 'AlgDesign' 패키지 기능 - 플롯 실험을. 'Comments on algorithmic design'밥 휠러에 의해을 읽는 것은 어떤 다른 패키지는

library('crossdes') 
williams_design <- williams(3) 
#  [,1] [,2] [,3] 
# [1,] 1 2 3 
# [2,] 2 3 1 
# [3,] 3 1 2 
# [4,] 3 2 1 
# [5,] 1 3 2 
# [6,] 2 1 3 

윌리엄스 라틴 스퀘어 크로스 오버 디자인을위한 R

# using Oats data 
library('AlgDesign') 
data(Oats, package="nlme") 

# Two factors 
# create 3X4 full factorial using expand.grid function: variety(3 levels) + nitro(4 levels): 3*4 = 12 levels 

df1 <- expand.grid(variety = factor(unique(Oats$Variety)), 
        nitro = factor(unique(Oats$nitro))) 

# create split plot design having 6 whole plots each contains 12 subplots. 

SP1 <- optBlock(withinData = df1, blocksizes = rep(12, 6)) 
summary(SP1) 
#    Length Class  Mode 
# D   1  -none-  numeric 
# diagonality 1  -none-  numeric 
# Blocks  6  -none-  list 
# design  2  data.frame list 
# rows  72  -none-  numeric 
SP1$Blocks 
SP1$design 

# Three factors 
df2 <- data.frame(condition = factor(c('low', 'high'))) 
# rbind df2 three times to get three design (3 designs * 2 levels of condition = 6 whole plots) 
df2 <- rbind(df2, df2, df2) 

# create split plot design having 6 whole plots each contains 12 subplots 
SP2 <- optBlock(frml   = ~ condition * (variety + nitro + variety:nitro), 
       withinData  = df1, 
       blocksizes  = rep(12, 6), 
       wholeBlockData = df2, 
       args   = FALSE) 
summary(SP2) 
#   Length  Class  Mode 
# D   1  -none-  numeric 
# diagonality 1  -none-  numeric 
# Blocks  6  -none-  list 
# design  3  data.frame list 
# rows  72  -none-  numeric 
SP2$Blocks 
SP2$design 

를 사용하여 실험 설계에서 당신을 도울 수

library('daewr') 
library('FrF2') 

실험 디자인 시설의 출발점이되기를 바랍니다. in R. 여기

+0

답변 해 주셔서 감사합니다. 나는 당신이 그것을 보여줄 때'optBlock' 함수를 시도해 보았고, 다소 다른 디자인을위한 인자 조합을 생성했다. 그러나 가장 중요하게, * 그것을 랜덤 화하지 않는다 *. 마찬가지로, 다른 일러스트레이션도 임의로 선택하지 않습니다. 디자인을 생성하는 방법을 알고 있습니다. 내 질문에, 나는 실제로 디자인을 무작위로 추출하는 방법에 집중하려고했다. 무작위 화는 매우 중요합니다. 사람들은 심각하게 받아 들일 필요가 있으며, 사용자는 디자인을 무작위로 추출하는 데 사용하기 쉬운 방법을 필요로합니다. – rvl

+0

소스 코드'edit (getAnywhere (optBlock))'를보십시오. 이 함수의 첫 번째 줄은 RNG의 시드를 설정하는 것입니다. 'optBlock'은 분할 플롯 실험을위한 최적의 랜덤 계획을 제공합니다. 최적화는 D 또는 Dpc 기준을 계산하여 수행됩니다. 또한 소스 코드에서 오류 값 = 22를보십시오. – Sathish

+0

작업 공간에서 이것을 시도하십시오 :'ls (all.names = TRUE)'. 그런 다음'.Random.seed' 개체가 있는지 확인하십시오. 그 중 하나가 보이면 그 객체'rm ('. Random.seed')'를 삭제하십시오. 이제'optBlock' 함수를 실행하십시오. 그 객체가 작업 공간에 다시 나타난 것을보아야합니다. 또한'optBlock' 함수 내에서'args = TRUE'를 사용하고 요약 (optBlock-output)을보십시오. – Sathish