首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R中的分数响应回归

R中的分数响应回归
EN

Stack Overflow用户
提问于 2016-06-02 06:55:44
回答 2查看 7.9K关注 0票数 8

我试图对响应变量在0到1之间的数据进行建模,因此我决定在R中使用分数响应模型,根据我目前的理解,分数响应模型类似于logistic回归,但它使用qausi-似然方法来确定参数。我不确定我是否理解得对。

到目前为止,我尝试的是来自包frmglmfrmglm,它与这个OP相同

代码语言:javascript
运行
复制
library(foreign)
mydata <- read.dta("k401.dta")

此外,我遵循了在这个OP中使用glm的过程。但是,对于使用frm的相同数据集,它返回不同的SE。

代码语言:javascript
运行
复制
library(frm)
y <- mydata$prate
x <- mydata[,c('mrate', 'age', 'sole', 'totemp1')]
myfrm <- frm(y, x, linkfrac = 'logit')

frm回来了

代码语言:javascript
运行
复制
*** Fractional logit regression model ***

           Estimate Std. Error t value Pr(>|t|)    
INTERCEPT  1.074062   0.048902  21.963    0.000 ***
mrate      0.573443   0.079917   7.175    0.000 ***
age        0.030895   0.002788  11.082    0.000 ***
sole       0.363596   0.047595   7.639    0.000 ***
totemp1   -0.057799   0.011466  -5.041    0.000 ***

Note: robust standard errors

Number of observations: 4734 
R-squared: 0.124 

对于glm,我使用

代码语言:javascript
运行
复制
myglm <- glm(prate ~ mrate + totemp1 + age + sole, data = mydata, family = quasibinomial('logit'))
summary(myglm)

Call:
glm(formula = prate ~ mrate + totemp1 + age + sole, family = quasibinomial("logit"), 
    data = mydata)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-3.1214  -0.1979   0.2059   0.4486   0.9146  

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  1.074062   0.047875  22.435  < 2e-16 ***
mrate        0.573443   0.048642  11.789  < 2e-16 ***
totemp1     -0.057799   0.011912  -4.852 1.26e-06 ***
age          0.030895   0.003148   9.814  < 2e-16 ***
sole         0.363596   0.051233   7.097 1.46e-12 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for quasibinomial family taken to be 0.2913876)

    Null deviance: 1166.6  on 4733  degrees of freedom
Residual deviance: 1023.7  on 4729  degrees of freedom
AIC: NA

Number of Fisher Scoring iterations: 6

我应该依赖哪一个?使用glm而不是frm更好吗?因为我已经看到SE估计的OP可能有所不同。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-02 07:43:36

这两种方法的不同之处在于在计算鲁棒标准误差时,自由度不同。使用类似的默认值,结果将是相同的。请参见以下示例:

代码语言:javascript
运行
复制
library(foreign)
library(frm)
library(sandwich)
library(lmtest)

df <- read.dta("http://fmwww.bc.edu/ec-p/data/wooldridge/401k.dta")
df$prate <- df$prate/100

y <- df$prate
x <- df[,c('mrate', 'age', 'sole', 'totemp')]

myfrm <- frm(y, x, linkfrac = 'logit')

*** Fractional logit regression model ***

           Estimate Std. Error t value Pr(>|t|)    
INTERCEPT  0.931699   0.084077  11.081    0.000 ***
mrate      0.952872   0.137079   6.951    0.000 ***
age        0.027934   0.004879   5.726    0.000 ***
sole       0.340332   0.080658   4.219    0.000 ***
totemp    -0.000008   0.000003  -2.701    0.007 ***

现在GLM:

代码语言:javascript
运行
复制
myglm <- glm(prate ~ mrate + totemp + age + sole, 
             data = df, family = quasibinomial('logit'))
coeftest(myglm, vcov.=vcovHC(myglm, type="HC0"))

z test of coefficients:

                 Estimate    Std. Error z value              Pr(>|z|)    
(Intercept)  0.9316994257  0.0840772572 11.0815 < 0.00000000000000022 ***
mrate        0.9528723652  0.1370808798  6.9512     0.000000000003623 ***
totemp      -0.0000082352  0.0000030489 -2.7011              0.006912 ** 
age          0.0279338963  0.0048785491  5.7259     0.000000010291017 ***
sole         0.3403324262  0.0806576852  4.2195     0.000024488075931 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

对于HC0,标准错误是相同的。也就是说,frm默认使用HC0。有关详细讨论,请参阅this post。在某些情况下,sandwich使用的缺省值可能更好,尽管我怀疑这在一般情况下并不重要。您可以从您的结果中看到这一点:数值上的差异非常小。

票数 9
EN

Stack Overflow用户

发布于 2016-06-02 07:01:11

您需要将prate变量除以100。您还可能需要升级您的frm版本。

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

https://stackoverflow.com/questions/37584715

复制
相关文章

相似问题

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