R 中的可变长度不同错误消息

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

我正在对

https://hastie.su.domains/ElemStatLearn/
的垃圾邮件数据集进行逻辑回归。因变量在最后一列中,在我将数据导入 R studio 后给出为 V58。但是我收到错误消息“可变长度不同(在'V1'中找到)”

我已经使用 na.omit 检查了 na,我尝试删除 V1 列只是为了查看是否可以解决问题,但我得到了相同的消息。我尝试改用旧的 cv.glm 函数,但这不起作用。我还尝试将因变量称为 spam.data$V58。我卡住了。我错过了什么?以下是我到目前为止获得模型的代码。

spam.data <- data_frame(read.table(datapathname))

dim(spam.data)
str(spam.data)
summary(spam.data)

set.seed(2718)
row.number = sample(1:nrow(spam.data), 0.7*nrow(spam.data))
train = spam.data[row.number,]
test = spam.data[-row.number,]
dim(train)
dim(test)

model.logistic = glm(as.factor(spam.data[58])~., data=train, family=binomial) #The error gets thrown here.

summary(model.logistic)

我还应该说,我创建数据集的方式是将数据从网站复制并粘贴到文本文件,然后从该文件将其读入 R。网站上的信息说我们应该得到 4601 行和 58 列,实际上我们得到了这个大小的数据集。

有什么想法吗?

r dataset logistic-regression
2个回答
1
投票

拟合logistic模型有两个错误:

  • 数据是火车,但您从 spam.data 中获取结果。这两个数据框具有不同数量的观察值。相反,使用
    train[58]
    作为结果。
  • 当您将结果更改为带有 as.factor 的因子时,将返回单级 NA,因为 as.factor 不适用于结果的 dbl 格式。因此,首先用
    unlist(train[58])
    取消列出结果。

使用这两个更改模型对我有用:

model.logistic = glm(as.factor(unlist(train[58]))~., data=train, family=binomial)

1
投票

您正在使用

spam.data
中的一列(下例中的
spam
)作为您的回应;长度为 4601。您的响应变量来自
train
数据集,该数据集只有 3221 行。

## archived on CRAN, need to install with remotes::install_version
remotes::install_version("ElemStatLearn", version = "2015.6.26.2")
library(ElemStatLearn)  ## loads 'spam' data set
set.seed(2718)
nr <- nrow(spam)
row.number <- sample(nr, round(0.7*nr))
train <- spam[row.number,]

## column 58 is called 'spam'; best practice to refer to variables
##  by name rather than index where possible
glm(as.factor(spam) ~., data=train, family=binomial) 
© www.soinside.com 2019 - 2024. All rights reserved.