【问题标题】:Error in eval(family$initialize) : y values must be 0 <= y <= 1eval(family$initialize) 中的错误:y 值必须为 0 <= y <= 1
【发布时间】:2019-03-18 20:01:33
【问题描述】:

教科书中提到我需要将Satellite数据转换为0和1(如果Y = 0,则Y = 0。但如果Y大于或等于1,则Y = 1),但是我不知道该怎么做。我错过了什么吗?

这是我的代码:

library(icda)
data(horseshoecrabs)
crab=horseshoecrabs
head(crab)
??horeshoecrabs
probit=glm(Satellites ~ Weight, family=binomial(link="probit"), data=horseshoecrabs )
summary(probit)

这个问题来自“分类数据分析简介”第 2 版问题 3.8,以防万一。我的任务是报告以权重为预测变量的概率模型的拟合度。

【问题讨论】:

    标签: r data-analysis categorical-data


    【解决方案1】:

    由于您使用的是概率模型,因此您的响应必须是二进制的(即它必须是 0 或 1)。 Satellites 不是二进制的。

    > horseshoecrabs$Satellites
      [1]  8  0  9  0  4  0  0  0  0  0  0  0 11  0 14  8  1  1  0  5  4  3  1  2  3  0  3  5  0  0  4  0  0  8  5  0  0  6  0  6  3
     [42]  5  6  5  9  4  6  4  3  3  5  5  6  4  5 15  3  3  0  0  0  5  3  5  1  8 10  0  0  3  7  1  0  6  0  0  3  4  0  5  0  0
     [83]  0  4  0  3  0  0  0  0  5  0  0  0  0  1  0  1  1  1  1  1  1  4  1  1  1  1  2  4  3  6  0  2  2  0 12  0  5  6  6  2  0
    [124]  2  3  0  3  4  2  6  6  0  4 10  7  0  5  5  6  6  7  3  3  0  0  8  4  4 10  9  4  0  0  0  0  4  0  2  0  4  4  3  8  0
    [165]  7  0  0  2  3  4  0  0  0
    

    具有二进制数据的概率的示例是考虑以下编码:让我们引入一个新的二进制变量Satellites.binary,并考虑 Yes = 1 和 No = 0。如果至少存在一颗卫星 (即卫星> 0),我们将认为观测成功并将值编码为1。如果卫星确实存在,我们将值编码为0。

    # Consider Satellite to be Yes if Satellite > 0 and No if Satellite = 0
    # Code Yes = 1, No = 0
    Satellites.binary = ifelse(horseshoecrabs$Satellites > 0, 1, 0)
    > Satellites.binary
      [1] 1 0 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 1 0 1 1 0 0 1 0 0 1 1 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1
     [63] 1 1 1 1 1 0 0 1 1 1 0 1 0 0 1 1 0 1 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 0 1 1 1 1 0 1
    [125] 1 0 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 0 0 0 1 0 1 0 1 1 1 1 0 1 0 0 1 1 1 0 0 0
    

    现在有了这个变量,我们可以构建一个概率模型

    probit = glm(Satellites.binary ~ horseshoecrabs$Weight, family=binomial(link="probit"))
    > summary(probit)
    Call:
    glm(formula = Satellites.binary ~ horseshoecrabs$Weight, family = binomial(link = "probit"))
    
    Deviance Residuals: 
        Min       1Q   Median       3Q      Max  
    -2.1436  -1.0774   0.5336   0.9196   1.6216  
    
    Coefficients:
                          Estimate Std. Error z value Pr(>|z|)    
    (Intercept)            -2.2383     0.5116  -4.375 1.22e-05 ***
    horseshoecrabs$Weight   1.0990     0.2151   5.108 3.25e-07 ***
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    
    (Dispersion parameter for binomial family taken to be 1)
    
        Null deviance: 225.76  on 172  degrees of freedom
    Residual deviance: 195.46  on 171  degrees of freedom
    AIC: 199.46
    
    Number of Fisher Scoring iterations: 4
    

    注意:如前所述,这只是一个示例,可能不适合您。这是为了说明目的而创建的,以演示如何使用概率模型。

    【讨论】:

    • 这很好。我建议在原始数据框中包含二进制变量:horseshoecrabs &lt;- transform(horseshoecrabs, sat_binary=ifelse(Satellites&gt;0,1,0))
    • @BenBolker:是的,我同意,这是一个很好的建议。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2021-02-06
    • 2021-05-06
    • 2021-08-02
    相关资源
    最近更新 更多