在 R 中使用一个因变量和一个独立二元变量执行逻辑回归时结果出现错误?

问题描述 投票:0回答:1

强调文本我有一个数据集,

df
,其中一个因变量的级别为“0”和“1”,一个自变量的级别为“1”和“2”。在执行逻辑回归时,下面的代码仅返回一个混淆矩阵,其输出分类为“1”类别,没有“0”。我尝试将概率截止值增加到 0.65 和 0.7。结果不会改变。这是一个示例数据框;原始数据集有近4500行数据。

数据框:

df <- data.frame(V1 = c(0,1,1,0,0,1,1,0,1,1,1,0,0,1),
                 V2 = c(1,1,1,1,1,1,2,1,2,1,1,1,1,1))
df
#>    V1 V2
#> 1   0  1
#> 2   1  1
#> 3   1  1
#> 4   0  1
#> 5   0  1
#> 6   1  1
#> 7   1  2
#> 8   0  1
#> 9   1  2
#> 10  1  1
#> 11  1  1
#> 12  0  1
#> 13  0  1
#> 14  1  1

# set levels
df$V1 <- factor(df$V1,
                    levels = c(0, 1),
                    labels = c("False", "True")
)

# Splitting dataset
split <- caTools::sample.split(df, SplitRatio = 0.8)
split
df$V1<-factor(df$V1)
train_reg <- subset(df, split == "TRUE")
test_reg <- subset(df, split == "FALSE")

# Training model
logistic_model <- glm(V1 ~ V2, 
                      data = train_reg, 
                      family = "binomial")
logistic_model

# Summary
summary(logistic_model)

predict_reg <- predict(logistic_model, 
                       test_reg, type = "response")
predict_reg

# Changing probabilities
predict_reg <- ifelse(predict_reg >0.5, 2, 1)


# Evaluating model accuracy
# using confusion matrix
table(test_reg$V1, predict_reg)
r regression logistic-regression categorical-data
1个回答
0
投票

我认为你使用

caTools::sample.split
错了。

sample.split( Y, SplitRatio = 2/3, group = NULL )
论据:
Y:数据标签向量。如果只有几个标签(如预期),则两个子集中数据的相对比例将相同。

如果您查看

sample.split
通话的结果:

> split <- caTools::sample.split(df, SplitRatio = 0.8)
> split
[1] FALSE  TRUE

我认为它将数据集的两列解释为两个观察值的向量。 结果是您碰巧按奇数和偶数情况分割数据(因为 R 自动复制 (FALSE, TRUE) 向量以匹配数据集的行数)。 对于您给我们的特定示例,我们最终将训练集完全分离(with(train_reg, table(V1, V2))

表明响应中的零值
V1
仅出现在
V2==1
中,并且我们还有一个测试集只有一个 
V2
 值(全部等于 1),因此测试集的预测将全部相等(在这种情况下,所有预测概率均为 0.4),因此您选择的任何阈值都会给您全零或全部为预测值...

无论如何,你想要的是这样的:

split <- caTools::sample.split(df$V1, SplitRatio = 0.8) split ## [1] TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE ## [13] TRUE TRUE
    
© www.soinside.com 2019 - 2024. All rights reserved.