所以我试图处理从UCI数据集存储库获得的数据集(fertility_diagnosis)。
data = read.csv('fertility_rate.csv', header = FALSE)
summary(data)
str(data)
> str(data)
'data.frame': 100 obs. of 10 variables:
$ V1 : num -0.33 -0.33 -0.33 -0.33 -0.33 -0.33 -0.33 -0.33 1 1 ...
$ V2 : num 0.69 0.94 0.5 0.75 0.67 0.67 0.67 1 0.64 0.61 ...
$ V3 : int 0 1 1 0 1 1 0 1 0 1 ...
$ V4 : int 1 0 0 1 1 0 0 1 0 0 ...
$ V5 : int 1 1 0 1 0 1 0 1 1 0 ...
$ V6 : int 0 0 0 0 0 0 -1 0 0 0 ...
$ V7 : num 0.8 0.8 1 1 0.8 0.8 0.8 0.6 0.8 1 ...
$ V8 : int 0 1 -1 -1 -1 0 -1 -1 -1 -1 ...
$ V9 : num 0.88 0.31 0.5 0.38 0.5 0.5 0.44 0.38 0.25 0.25 ...
$ V10: Factor w/ 2 levels "N","O": 1 2 1 1 2 1 1 1 1 1 ...
data[, c(V3:V6,V8)] <- sapply(data[, c(V3:V6,V8)], as.numeric)
> data[, c(V3:V6,V8)] <- sapply(data[, c(V3:V6,V8)], as.numeric)
Error in `[.data.frame`(data, , c(V3:V6, V8)) : object 'V3' not found
可以看到变量名称为V1-V10。其中V3-V6和V9是int类型。 所以我试图将它们转换为数字类型。 但是在输出中我找不到对象。
> head(data,5)
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 -0.33 0.69 0 1 1 0 0.8 0 0.88 N
2 -0.33 0.94 1 0 1 0 0.8 1 0.31 O
3 -0.33 0.50 1 0 0 0 1.0 -1 0.50 N
4 -0.33 0.75 0 1 1 0 1.0 -1 0.38 N
5 -0.33 0.67 1 1 0 0 0.8 -1 0.50 O
并且我也尝试将回归应用于num类型变量,如下所示
library(caTools)
set.seed(123)
split = sample.split(data$V10, SplitRatio = 0.75)
train = subset(data, split == TRUE)
test = subset(data, split == FALSE)
lin_reg = lm(formula = V10 ~ V1+V2+V7+V9,
data = train)
> lin_reg = lm(formula = V10 ~ V1+V2+V7+V9,
+ data = train)
Warning messages:
1: In model.response(mf, "numeric") :
using type = "numeric" with a factor response will be ignored
2: In Ops.factor(y, z$residuals) : ‘-’ not meaningful for factors
谁能帮助我知道我做错了什么?
答案 0 :(得分:1)
嘿,我认为你犯了一个简单的错误,你会为自己踢。你的lm()模型应该使用语法
lm(Response(dependent).variable~Predictor(Independent).variable)
我相信您收到此错误是因为您的响应变量是因子变量而不是数字。如果您确定v10是响应变量,那么您需要查看逻辑回归(https://www.r-bloggers.com/how-to-perform-a-logistic-regression-in-r/)。但是,我怀疑你想知道你的一个数值变量如何响应V10和其他一些变量。它是否正确?我需要更多地了解您的变量以及您要测试的内容以进一步解释。
希望这会有所帮助。