2014-07-22 4 views
0

DOE에서 모델 용어의 힘을 결정하기 위해 우도 비 (likelihood ratio) 테스트를 수행하고자합니다. 지금까지 필자는 glm에서 p 값을 사용하여이 작업을 수행했으며 문제가 없었습니다. anova 함수를 사용하기 시작하면서, glm.fit 함수의 입력을 받아들이도록 설계된 anova 함수가 아닌 glm 함수 만있는 것처럼 보입니다. 여기에 내가하고 싶은 것이의 예는 다음과 같습니다glm.fit을 사용한 후의 ANOVA

X # This is a model matrix from matrix.model 
y # These are the y values for the fit 
tfit = glm.fit(X, y, family = poisson()) 
anova(tfit, test = 'LRT') 

일반적으로 나는 anova 함수 호출 그냥 anova.glm에 변경 될 필요가 있지만, 그런 경우가 아니라고 생각합니다. glm.fit 함수 출력을 anova 함수 입력과 호환되도록하려면 어떻게합니까?

답변

1

glm.fit의 출력은 glm 클래스의 출력이 아니며 모델에 대한 모든 종류의 데이터가있는 원시 목록입니다. 이 함수는 glm 함수에 의해 생성 된대로 glm 클래스의 객체를 예상하기 때문에 anova.glm으로 공급할 수 없습니다. 당신이 이렇게 모델 행렬에 설정되어 사용할 수없는 원시 데이터를 (있는 경우에, 당신은 원하는 결과를 생산하기 위해이에 glm 기능을 적용 할 수 있습니다.

X <- matrix(c(runif(10), rnorm(10)), ncol = 2) 
y <- round(runif(10, 1, 5)) 
X.mm <- model.matrix(y ~ X) 
model.fit.1 <- glm.fit(X.mm, y, family = poisson()) 
class(model.fit.1) 
model.fit.2 <- glm(y ~ X, family = "poisson") 
class(model.fit.2) 

anova(model.fit.2, test = "LRT") 

을 당신이 glm 기능을 사용할 수 없습니다 및 사용해야하는 경우 glm.fit 다음은 glm.fit 출력에서 ​​LRT를 직접 구성 할 수 있습니다. 시작은 다음과 같은 기능

LRT.glm.fit <- function(glm.fit.mod){ 
    df.null <- glm.fit.mod$df.null 
    df.mod <- glm.fit.mod$df.residual 
    dev.null <- glm.fit.mod$null.deviance 
    dev.mod <- glm.fit.mod$deviance 
    dev.diff <- dev.null - dev.mod 
    p.value <- 1 - pchisq(dev.null - dev.mod, df.null - df.mod) 
    output <- c(round(df.null), round(df.mod), dev.null, dev.mod, p.value) 
    names(output) <- c("df.null", "df.mod", "dev.null", "dev.mod", "p.value") 
    output 
} 
가 내가 원시 데이터를 필요로하지 싶습니다 오히려 모델 매트릭스를 통과 할 것이다
+0

...이되어 가지고 들어 엠씨 전력 계산 루틴을 위해. 거기에 방법이 그것을 할 필요가없이 GLM 개체 ? –