2012-05-23 51 views
1

我正在嘗試使用R來計算廣義相加模型(mgcv包中的gam)中交互作用項的Wald測試。documentation for regTermTest表示該函數需要一個模型與coef和vcov方法,但放入gam模型似乎並不奏效。我怎樣才能使這種方法工作?如果無法完成,是否有另一種簡單的方法來計算R中相同的值?在R中,無法獲得regTermTest for gam模型的結果

LM模型的工作

model <- lm(sysbp~pmper10*se_race4,data=mesa) 
regTermTest(model,"pmper10:se_race4") 
# Wald test for pmper10:se_race4 
# in lm(formula = sysbp ~ pmper10 * se_race4, data = mesa) 
# F = 3.940545 on 3 and 43621 df: p= 0.0080253 

但GAM模型沒有

model <- gam(sysbp~pmper10*se_race4,data=mesa) 
regTermTest(model,"pmper10:se_race4") 
# Error in solve.default(V) : 'a' is 0-diml 

回答

2

這將工作,如果你使用的庫gam但不mgcv

regTermTest函數依賴於從給定模型的模型矩陣中提取'assign'屬性。

aa <- attr(model.matrix(model), "assign")[okbeta]

該目的aa用於創建V

mgcv不具有該屬性的包A gam對象時構造的索引。從

data(esoph) 
model1 <- glm(cbind(ncases, ncontrols) ~ agegp + tobgp * 
    alcgp, data = esoph, family = binomial()) 


regTermTest(model1,"tobgp") 

使用例如,如果我們使用軟件包GAM

library(gam) 
model2 <- gam(cbind(ncases, ncontrols) ~ agegp + tobgp * 
    alcgp, data = esoph, family = binomial()) 

regTermTest(model2,"tobgp") 

給人的輸出

Wald test for tobgp 
    in gam(formula = cbind(ncases, ncontrols) ~ agegp + tobgp * alcgp, 
    family = binomial(), data = esoph) 
    F = 3.961947 on 3 and 67 df: p= 0.011609 

雖然

library(mgcv) 

model3 <- gam(cbind(ncases, ncontrols) ~ agegp + tobgp * 
    alcgp, data = esoph, family = binomial()) 


regTermTest(model3,"tobgp") 

給出由OP報告的錯誤。

+0

謝謝 - 非常有幫助的答案!我最終在aod包中使用了wald.test函數,因爲我想繼續使用mgcv。 –