首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:用频数表进行logistic回归,找不到正确的Pearson X平方统计量。

R:用频数表进行logistic回归,找不到正确的Pearson X平方统计量。
EN

Stack Overflow用户
提问于 2014-11-16 03:57:12
回答 1查看 3.6K关注 0票数 2

我对下面的数据框架进行了logistic回归,得到了一个合理的结果(与使用STATA的结果相同)。但是,我从R得到的Pearson平方和自由度与STATA非常不同,而STATA又给了我一个很小的p值。而且我无法得到在ROC曲线下的面积。有人能帮我找出为什么残差()在先验权值的glm()上不起作用,以及如何处理ROC曲线下的面积?

以下是我的代码和输出.

1.数据

这是我的数据框架test_data,y是结果,x1和x2是协变量:

Y x1 x2 freq 0 No 0 268 0 No 1 14 0 Yes 0 10 9 0 Yes 1 1 1 No 0 31 1 No 1 6 1 Yes 0 45 1 Yes 1 6

我通过统计每个协变量模式的出现情况,从原始数据生成这个数据框架,并将数字存储在新变量freq中。

2. GLM模型

然后,我做了logistic回归,如:

logit=glm(y~x1+x2, data=test_data, family=binomial, weights=freq)

产出显示:

偏差残差:1 2 3 4 5 6 7 8 -7.501 -3.536 -8.818 -1.521 3.501 10.409 2.129系数:估计性病。错误z值Pr(>\x\x}) (截获) -2.2010 0.1892 -11.632 < 2e-16 * x1 1.3538 0.2516 5.381 7.39e-08 * x2 1.6261 0.4313 3.770 0.000163 *

信号。编码:0 '‘0.001 '__’0.01 '‘0.05 '.’0.1‘’1

(二项族的色散参数取为1)

代码语言:javascript
复制
Null deviance: 457.35  on 7  degrees of freedom

剩余偏差:5自由度416.96,AIC: 422.96

Fisher评分迭代数:5

系数与STATA相同。

3. X平方统计

当我试图计算皮尔逊广场时:

pearson_chisq =和(剩余数(logit,type = "pearson",weights=test_data$freq)^2)

我得到了488,而不是STATA给的1.3。由R生成的自由度是chisq_dof = df.residuals(logit)=5,而不是1,所以我得到了一个极小的p-值~e^-100。

4.歧视

然后我计算了ROC曲线下的面积为:library(verification)

logit_mf = model.frame(logit) roc.area(logit_mf $y,fitted(logit))$A

产出如下:

1 0.5警告信息: 在wilcox.test.default(predobs == 1,predobs == 0,alternative = "great")中:不能用领带计算精确的p值。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2014-11-17 02:26:54

我终于想出了解决这个问题的办法。我上面使用的数据集应该被概括为协变量模式。然后用皮尔逊方的定义进行计算。我提供的R代码如下:

提取协变量模式 library(dplyr) temp=test\_data %>% group\_by(x1, x2) %>% summarise(m=sum(freq),y=sum(freq\*y)) temp$pred=fitted(p01\_logit\_j)[1:4] 计算 temp=mutate(temp, pearson=(y-m_pred)/sqrt(m_pred\*(1-pred))) pearson\_chi2 = with(temp, sum(pearson^2)) temp\_dof = 4-(2+1) #dof=J-(p+1) 计算p值 pchisq(pearson\_chi2, temp\_dof, lower.tail=F)

P值为0.241941,与STATA一致.

为了计算AUC,首先将协变量模式扩展为原始数据,然后利用扩展数据得到AUC。注意到我们在频率表中有392 "0“和88 "1”。我的代码如下:

扩展观测 y\_expand=c(rep(0,392),rep(1,88)) logit\_mf = model.frame(logit) logit\_pred = fitted(logit) logit\_mf$freq=test\_data$freq 扩展预测 yhat\_expand=with(logit\_mf, rep(pred, freq)) library(verification) roc.area(y\_expand, yhat)$A

AUC=0.6760,与STATA的相同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26953585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档