我正在尝试生成样本预测,并在运行以下代码Error: variable 'dummygen' was fitted with type "numeric" but type "factor" was supplied
后收到此消息。
我检查了str
以验证我使用的两个变量都是数字的,它们似乎是。我在这里做了一堆狩猎,认为this可能有点相关,但我还没有能够得到建议。
这是我到目前为止的代码。
library(foreign)
library(plyr)
library(rvest)
library(stringi)
library(purrr)
library(XLConnect)
library(splitstackshape)
library(tidyr)
library(dplyr)
donner_raw <- read.csv("donner.txt", sep="\t", header = FALSE)
colnames(donner_raw) <- c("age_gen", "survive")
donner_raw <- separate(donner_raw, age_gen, into = c("age", "gender"), "(?<=\\d)(?=[A-Za-z])")
logit <- glm(survive ~ age + dummygen,family=binomial(link='logit'),data=donner_raw)
newlogit <- data.frame(age=seq(1,6, length=20), dummygen=("0"))
ooslogit <- predict.glm(logit, newlogit, se.fit=TRUE)
我不知道在我做了什么的过程中我搞砸了。这是数据的可重现部分。
dput(droplevels(head(donner_raw)))
structure(list(age = structure(c(6L, 4L, 5L, 3L, 2L, 1L), .Label = c("13", "3", "4", "45", "6", "60"), class = "factor"), gender = c("M", "F", "F", "F", "F", "F"), dummygen = structure(c(2L, 1L, 1L, 1L, 1L, 1L), .Label = c("0", "1"), class = "factor")), .Names = c("age", "gender", "survive", "dummygen"), row.names = c(NA, 6L), class = "data.frame")
答案 0 :(得分:0)
让我们简单地阅读并思考错误信息:
错误:变量'dummygen'的类型为“numeric”,但提供了“factor”类型
在行之后发生此错误:
ooslogit <- predict.glm(logit, newlogit, se.fit=TRUE)
(据推测,至少,因为你的问题不是很明确,并提供了许多似乎没有相关的代码。)
所以R告诉你,当模型 fit 时,变量dummygen
是数字,但现在你给它一个因子。
让我们看看:
str(newlogit)
'data.frame': 20 obs. of 2 variables:
$ age : num 1 1.26 1.53 1.79 2.05 ...
$ dummygen: Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
是的!
所以你的问题是你通过指定:
莫名其妙地创建了数据框newlogit
newlogit <- data.frame(age=seq(1,6, length=20), dummygen=("0"))
明确指定变量dummygen
不是数字。只需将其转换回来,或首先删除引号。例如:
newlogit <- data.frame(age=seq(1,6, length=20), dummygen= 0)
或
newlogit$dummygen <- as.numeric(newlogit$dummygen)