当一组参数被粘贴()作为向量时,如何获得glm模型中R的真实残余偏差和自由度

时间:2013-01-24 19:47:47

标签: r regression glm anova

我正在编写一个脚本(在python中,在pypeR中有R部分),这样我需要在R中使用一个函数来比较两个模型的F比率测试。

模型是这样的:

型号1: Response ~ Predictor A + Predictor B + Predictor C.... + Predictor n
模型2: Response ~ Predictor 1

预测变量A+B+...n组成Predictor 1,所以在这里嵌套没问题(相信我)。

当我将Predictor A + Predictor B + Predictor C.... + Predictor n传递给我创建的函数时,我认为它将它们视为一个变量(因为自由度与{{1}的自由度相同})。也许这是因为我正在使用Model 2?无论如何,模型1中的预测变量的实际数量将在不同的运行中发生变化(这就是我需要它作为函数的原因),所以除了使用paste()之外我还不确定如何适应这个。

请记住,粘贴实际上可能不是问题所在;我只是想让人们知道认为问题可能是。

对{em>我如何获得paste()的真实剩余偏差和自由度有什么建议吗?它可能是一个黑客。例如,我只是减去model 1来获得自由度。我不知道剩余偏差的类似黑客是什么。

这是函数和示例实例化:

length(vector of predictors) - 1

1 个答案:

答案 0 :(得分:8)

也许我误解了这个问题,但是anova会比较模型,你可以给它一个测试。我不确定你关于嵌套的陈述(并且会留给你,以确保你在做一些合理的事情)

comparemodels <- function(data, response, terms1, terms2, test, family = 'gaussian', ...) {
  f1 <- reformulate(terms1, response)
  f2 <- reformulate(terms2, response)
  m1 <- glm(f1, data = data, family = family)
  m2 <- glm(f2, data = data, family = family)
  compare <- anova(m1, m2, test = test)
  print(compare)

}

response <- 'QnWeight_initial'
t1 <- c("Acon5","Baez","C294","C316","i_120_PigTail","i129","Jackstraw_PigTail","Neil_Young","Ramble","Sol_18")
t2 <- 'MLH'
comparemodels(data, response,t1, t2,  test = 'F' )


Analysis of Deviance Table

Model 1: QnWeight_initial ~ Acon5 + Baez + C294 + C316 + i_120_PigTail + 
    i129 + Jackstraw_PigTail + Neil_Young + Ramble + Sol_18
Model 2: QnWeight_initial ~ MLH
  Resid. Df Resid. Dev Df Deviance      F Pr(>F)
1        39     7197.1                          
2        48     7614.1 -9  -417.08 0.2511 0.9837