【问题标题】:Logistic regression - eval(family$initialize) : y values must be 0 <= y <= 1逻辑回归 - eval(family$initialize):y 值必须为 0 <= y <= 1
【发布时间】:2019-05-25 08:34:09
【问题描述】:

我正在尝试在此处提供的数据集中使用 R 执行逻辑回归:http://archive.ics.uci.edu/ml/machine-learning-databases/00451/ 这是关于乳腺癌的。此数据集包含一列 Classification,其中仅包含 1(如果患者没有癌症)或 2(如果患者患有癌症)

library(ISLR)
dataCancer <- read.csv("~/Desktop/Isep/Machine 
Leaning/TD/Project_Cancer/dataR2.csv")
attach(dataCancer)
names(dataCancer)
summary(dataCancer)

cor(dataCancer[,-11])
pairs(dataCancer[,-11])

#Step : Split data into training and testing data
training = (BMI>25)
testing = !training
training_data = dataCancer[training,]
testing_data = dataCancer[testing,]

Classification_testing = Classification[testing]

#Step : Fit a logistic regression model using training data
as.factor(dataCancer$Classification)
classification_model = glm(Classification ~ ., data = 
training_data,family = binomial )
summary(classification_model)

运行我的脚本时,我得到:

> classification_model = glm(Classification ~ ., data = training_data,family = binomial )
Error in eval(family$initialize) : y values must be 0 <= y <= 1
> summary(classification_model)
Error in summary(classification_model) : object 'classification_model' not found . 

我在其他帖子中添加了 as.factor(dataCancer$Classification),但它并没有解决我的问题。 如果它是这个预测器的内容,你能建议我一种将分类值介于 0 和 1 之间的方法吗? 感谢您的帮助。

【问题讨论】:

  • 虽然很多介绍使用 attach ;您真的不应该使用它来附加数据框,因为它会导致您发现的许多问题。

标签: r logistic-regression


【解决方案1】:

classification_model = glm(Classification ~ ., data = training_data,family = binomial) eval(family$initialize) 中的错误:y 值必须为 0

这是因为您的数据包含数值,而不是因子值。我希望你做到了

dataCancer$Classification

理想情况下,1,0 或 1,2 无关紧要,只要它是一个因素。但是,如果执行上述操作也没有帮助,那么您可以尝试将 1,2 转换为 1,0,然后尝试相同的代码。

当然,第二个错误是因为逻辑回归变量根本没有创建。

【讨论】:

    【解决方案2】:

    您在脚本中添加了as.factor(dataCancer$Classification),但即使附加了数据集dataCancer,上述命令也不会将数据集变量分类转换为一个因素。它只在控制台上返回一个因子。

    由于您想在训练数据集上拟合模型,您可以指定

    training_data$Classification <- as.factor(training_data$Classification)
    classification_model <- glm(Classification ~ ., data = 
                               training_data, family = binomial) 
    

    或者在glm行代码中使用as.factor函数

    classification_model <- glm(as.factor(Classification) ~ ., data = 
                               training_data, family = binomial)
    

    【讨论】:

      【解决方案3】:

      您需要将因变量重新编码为 0,1,因此请使用以下代码。

      library(car)
      
      dataCancer$Classification <- recode(dataCancer$Classification, "1=0; 2=1")
      

      【讨论】:

      • 我试过你的方法,它也有效。感谢您的帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 2021-05-06
      • 1970-01-01
      相关资源
      最近更新 更多