【问题标题】:Logistic Regression on factor: Error in eval(family$initialize) : y values must be 0 <= y <= 1因子的逻辑回归:eval 中的错误(family$initialize):y 值必须为 0 <= y <= 1
【发布时间】:2017-11-29 06:48:14
【问题描述】:

无法修复以下逻辑回归的以下错误

training=(IBM$Serial<625)
data=IBM[!training,]
dim(data)
stock.direction <- data$Direction
training_model=glm(stock.direction~data$lag2,data=data,family=binomial)
###Error### ----  Error in eval(family$initialize) : y values must be 0 <= y <= 1

我正在使用的数据中的几行

X   Date    Open    High    Low Close   Adj.Close   Volume  Return  lag1    lag2    lag3    Direction   Serial
1   28-11-2012  190.979996  192.039993  189.270004  191.979996  165.107727  3603600 0.004010855 0.004010855 -0.001198021    -0.006354834    Up  1
2   29-11-2012  192.75  192.899994  190.199997  191.529999  164.720734  4077900 0.00114865  0.00114865  -0.004020279    -0.009502386    Up  2
3   30-11-2012  191.75  192 189.5   190.070007  163.465073  4936400 0.003630178 0.003630178 -0.001894039    -0.005576956    Up  3
4   03-12-2012  190.759995  191.300003  188.360001  189.479996  162.957703  3349600 0.001213907 0.001213907 -0.002480478    -0.001636046    Up  4

【问题讨论】:

  • 您有Direction 变量作为字符(向上)。它不会工作
  • 逻辑回归不应该适用于定性变量吗?你会建议的任何修复方法
  • 但是您需要将变量更改为 1 或 0,因为错误消息告诉您,所以如果您必须上下分类,您可以使用 ifelse 将它们更改为 0 和 1s

标签: r logistic-regression r-factor


【解决方案1】:

之所以要求 0 到 1 之间的 y 值,是因为数据中的分类特征(例如“方向”)属于“字符”类型。您需要使用as.factor(data$Direction) 将它们转换为类型“因子”。所以:glm(Direction ~ lag2, data=...) 不需要声明 stock.direction。

您可以使用命令class(variable)检查变量的类别,如果它们是字符,您可以转换为因子并在同一数据框中创建一个新列。那么它应该可以工作了。

【讨论】:

  • 请参考as.factor(data$Direction)。所以:glm(Direction ~ lag2, data=...) 不需要声明 stock.direction。
【解决方案2】:

我遇到了同样的错误“eval(family$initialize) 中的错误:y 值必须为 0

之前:gene.train = read.csv("gene.train.csv", header=T) # 错误

AFTER :gene.train = read.csv("gene.train.csv", header=T, stringsAsFactors=T) # 没有错误。

【讨论】:

    【解决方案3】:

    在不了解数据的情况下,你应该这样做

    library(dplyr)
    df <- read.table(header = T, stringsAsFactors = F,  text ="X   Date    Open    High    Low Close   Adj.Close   Volume  Return  lag1    lag2    lag3    Direction   Serial
    1   28-11-2012  190.979996  192.039993  189.270004  191.979996  165.107727  3603600 0.004010855 0.004010855 -0.001198021    -0.006354834    Up  1
    2   29-11-2012  192.75  192.899994  190.199997  191.529999  164.720734  4077900 0.00114865  0.00114865  -0.004020279    -0.009502386    Up  2
    3   30-11-2012  191.75  192 189.5   190.070007  163.465073  4936400 0.003630178 0.003630178 -0.001894039    -0.005576956    Up  3
    4   03-12-2012  190.759995  191.300003  188.360001  189.479996  162.957703  3349600 0.001213907 0.001213907 -0.002480478    -0.001636046    Up  4
    1   28-11-2012  190.979996  192.039993  189.270004  191.979996  165.107727  3603600 0.004010855 0.004010855 -0.001198021    -0.006354834    Up  1
    2   29-11-2012  192.75  192.899994  190.199997  191.529999  164.720734  4077900 0.00114865  0.00114865  -0.004020279    -0.009502386    Down  2
    3   30-11-2012  191.75  192 189.5   190.070007  163.465073  4936400 0.003630178 0.003630178 -0.001894039    -0.005576956    Up  3
    4   03-12-2012  190.759995  191.300003  188.360001  189.479996  162.957703  3349600 0.001213907 0.001213907 -0.002480478    -0.001636046    Down  4
    ") %>%
      mutate(bin = ifelse(Direction == "Up", 1, 0))
    
    glm(bin ~ High, family = "binomial", data = df)
    

    【讨论】:

      猜你喜欢
      • 2019-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 2021-02-06
      • 2021-05-06
      • 2020-12-04
      相关资源
      最近更新 更多