【问题标题】:Using glm to predict continuous variables between 0 and 1 family=binomial(link='logit') gives error使用 glm 预测 0 和 1 之间的连续变量 family=binomial(link='logit') 给出错误
【发布时间】:2019-03-03 18:43:42
【问题描述】:

我正在尝试使用 glm 使用以下代码估计 0 到 1 之间的连续变量的逻辑回归,但收到附加错误:

> glm(y ~ x, data=test_data, family=binomial(link = 'logit'))
Error in eval(family$initialize) : y values must be 0 <= y <= 1

但是,当我对 test_data 进行汇总时,df 的 y 值完全介于 0 和 1 之间...

> summary(test_data)
       y                  x         
 Min.   :0.000000   Min.   :0.0000  
 1st Qu.:0.001510   1st Qu.:0.0000  
 Median :0.003664   Median :1.0000  
 Mean   :0.025847   Mean   :0.5386  
 3rd Qu.:0.009054   3rd Qu.:1.0000  
 Max.   :1.000000   Max.   :1.0000

谁能帮我理解这里的问题是什么?如果我检查变量的类型,它们都是数字:

> class(test_data$y)
[1] "numeric"
> class(test_data$x)
[1] "numeric"

【问题讨论】:

  • 使用class(variable) 检查您的变量。如果它们是字符,则需要转换它们。
  • 添加一个(小)数据样本。
  • 你不应该是一个因素吗? (例如 0 和 1)
  • @Matt 因子仅在因变量是分类变量时才有意义,例如,男性/女性没有内在数值并且因子将分配这些变量。数字输入本身就很好,例如某些测量的百分比值。
  • @Matt 它不应该是必要的——正如我在上面的标题中提到的,我使用 logit 来预测 0 到 1 之间的连续变量。这在经济学中相对常见。例如,请参阅这篇论文:tandfonline.com/doi/abs/10.1080/135048596356636

标签: r logistic-regression glm


【解决方案1】:

建议你试试:

which(as.numeric(test_data$x) < 0 | as.numeric(test_data$x) > 1)
which(as.numeric(test_data$y) < 0 | as.numeric(test_data$y) > 1)

【讨论】:

  • 是否需要检查 test_data$x?
【解决方案2】:

我在这里发现了问题 - 在深入研究数据之后,有少量行的 y 值非常小(可能是由于舍入误差),例如:

> test_data[276,]
# A tibble: 1 x 2
          y     x
      <dbl> <dbl>
1 -1.47e-17     0

但是,这些超出范围的值不会汇总显示。

【讨论】:

    猜你喜欢
    • 2016-08-19
    • 1970-01-01
    • 2020-02-22
    • 2012-06-12
    • 2020-10-22
    • 1970-01-01
    • 2020-11-14
    • 2012-03-25
    • 2022-12-05
    相关资源
    最近更新 更多