在R中的逻辑回归模型上缺乏拟合度时,如何计算Pearson的检验统计量?


10

对于R中的逻辑回归模型(使用函数进行拟合),获得似然比(aka偏差)统计和不拟合(或拟合优)检验非常简单。容易使某些单元格计数低到足以使测试不可靠的程度。验证似然比检验是否缺乏拟合的可靠性的一种方法是将其检验统计量和P值与Pearson的卡方检验(或)缺乏拟合的检验进行比较。G2glm(..., family = binomial)χ2

glm对象及其summary()方法均未报告缺少拟合的Pearson卡方检验的检验统计量。在搜索中,我唯一想到的就是chisq.test()功能(在stats包装中):其文档说“ chisq.test执行卡方列联表测试和拟合优度测试”。但是,该文档缺乏有关如何执行此类测试的信息:

如果x是具有一行或一列的矩阵,或者如果x是向量y且未给出,则执行拟合优度检验(x被视为一维列联表)。的条目x必须是非负整数。在这种情况下,检验的假设是总体概率是否等于中的概率p,如果p未给出,则全部等于。

我猜想您可以yglm对象的组件用作的x参数chisq.test。但是,您不能fitted.valuesglm对象的组件用作的p参数chisq.test,因为会出现错误:“ probabilities must sum to 1.

如何(在R中)至少可以计算出缺乏拟合的Pearson测试统计量,而不必手动执行这些步骤?χ2

Answers:


13

由于缺乏拟合,Pearson残差平方的总和正好等于Pearson检验统计量。因此,如果调用了拟合模型(即对象),则以下代码将返回测试统计信息:χ2glmlogistic.fit

sum(residuals(logistic.fit, type = "pearson")^2)

有关residuals.glm更多信息,请参见上的文档,包括可用的其他残差。例如,代码

sum(residuals(logistic.fit, type = "deviance")^2)

会给你的 G2测试统计信息,与deviance(logistic.fit)提供的统计信息相同。


我同意马克罗的观点。如果您想从小组中得到答案,您应该等待其他人首先说些什么。看到您的答案,您现在可能得到的任何东西都会产生偏差。另外,如果您知道答案,那么您要尝试证明什么?
Michael R. Chernick 2012年

@Macro-Firefeather已在此站点上发布了四个问题(包括此问题),并亲自回答了其中三个问题(包括此问题),一次接受了他/她自己的回答之一。这样的话,我可能会开始看到一种模式!
jbowman 2012年

@jbowman,我想像如果您在其他人发布答案之前自己弄清楚了自己的问题,但firefeather在发布问题后不到5分钟的时间里真正回答了您的问题,看来他/她不需要帮助,这就是让我问为什么...我不太了解这个动机...
Macro

3
@Macro,请参阅以下官方链接:blog.stackoverflow.com/2011/07/…(链接在底部复选框标签的“问问题”页面上:“回答您自己的问题–以问答形式分享您的知识”)。我在做作业时遇到了这个问题(尽管在课堂上演示了Minitab,但是选择使用R代替Minitab),但是我没有足够的时间来键入问题并等待回答。我找到了解决方法,并决定与社区分享。
Firefeather 2012年

2
@Macro,非常欢迎您!我希望我可以在没有提供答案的地方提出更多问题,并回答我没有提出的更多问题。但jbowman的关于特征码权:我对社会的贡献倾向于朝着对自己说。:)(至少我以某种方式为社区做出了贡献,对吧?)
Firefeather 2012年

10

Pearson统计量具有简并的分布,因此通常不建议将其用于逻辑模型拟合优度。我更喜欢结构化测试(线性,可加性)。如果要进行综合测试,请参见R rmsresiduals.lrm函数中实现的单自由度le Cessie-van Houwelingen-Copas-Hosmer无加权平方和测试。


2
-1:感谢您的见识!但是,这不能回答我的问题。因为这是对我在问题背景中所作的陈述的相关评论/讨论,所以您的答案可能属于注释而不是答案。
Firefeather 2014年

2
我想投票支持我的答案的四个人不同意你的看法。而且您还没有处理退化的分布。
Frank Harrell 2014年

@FrankHarrell:此GOF度量与Hosmer-Lemeshow(HL)GOF测试是否不同?假设是由于名称而定的,并且还比较了两者:进行了HL GOF测试(在ResourceSelection程序包中找到),其结果与resid(lrm_object, 'gof')将Logistic回归模型拟合为后得到的运行结果有所不同lrm_object <- lrm(...)。如果确实不同,您能否评论一下HL测试如何与您在此处提到的测试相提并论?谢谢!
梅格2015年

1
两者截然不同。HL统计(现在已过时)具有固定的df,并且通常基于风险度数。HLχ2 统计量因此不退化为 ñ。另一方面,提防任何χ2 df持续扩展的统计信息 ñ
Frank Harrell 2015年

我很乐意看到显示这种退化的模拟。
wdkrnls

0

谢谢,我没有意识到它是如此简单:sum(residuals(f1,type =“ pearson”)^ 2)但是,请注意,Pearsons残差取决于它是由协变量组还是由个体计算得出的。一个简单的例子:

m1是一个矩阵(这个是较大矩阵的头):

m1 [1:4,1:8]

    x1 x2 x3 obs    pi   lev  yhat y
obs  1  1 44   5 0.359 0.131 1.795 2
obs  0  1 43  27 0.176 0.053 4.752 4
obs  0  1 53  15 0.219 0.062 3.285 1
obs  0  1 33  22 0.140 0.069 3.080 3

x1-3是预测变量,obs则不是。在每个组中的观察值,pi是组成员身份的概率(根据回归方程预测),lev是杠杆率,hat矩阵的对角线,yhat预测的数量。(y = 1)在组中,而y是实际编号。

这将按组为您提供Pearson。请注意,如果y == 0,它有何不同:fun1 <-function(j){if(m1 [j,“ y”] == 0){#y = 0对于此协变量模式Pr1 <-sqrt(m1 [i,“ pi”] /(1-m1 [ i,“ pi”]))Pr2 <--sqrt(m1 [i,“ obs”])res <-round(Pr1 * Pr2,3)return(res)}否则{Pr1 <-m1 [j,“ y “]-m1 [j,” yhat“] Pr2 <-sqrt(m1 [j,” yhat“] *(1-(m1 [j,” pi“])))res <-round(Pr1 / Pr2,3 )return(res)}}'

从而

nr <-nrow(m1)
nr1 <- seq(1,nr)
Pr <- sapply(1:nrow[m1], FUN=fun1)
PrSj <- sum(Pr^2)

如果有大量的主题具有y = 0的协变量模式,则使用“按组”而不是“按个体”方法计算时,皮尔数残差将大得多。

参见例如,Hosmer&Lemeshow,“应用逻辑回归”,Wiley,200。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.