我正在编写一个脚本(在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
答案 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