#r
#r
Вопрос:
У меня есть следующий рабочий код
glm.fit <- glm(Income ~ .,data=train,family=binomial)
summary(glm.fit)
Однако есть несколько вопросов, которые я хочу задать, и чтобы я мог задавать вопросы, я решил попробовать воспроизвести код, используя набор данных iris.
Я пытался
cf<-iris
glm.fit(Petal.Width ~ ., cf, family = binomial)
но я получаю сообщение об ошибке
Ошибка в dim (данные) <- dim: недопустимый первый аргумент, должен быть векторным (списком или атомарным)
[Обновление]
Я вижу данные, которые я ожидаю, используя следующее
library(dplyr)
cf<-iris
cf %>% head(10)
Комментарии:
1. можете ли вы попробовать
head(cf)
и проверить, что это выглядит так, как вы думаете, должно быть?2.
glm.fit
принимает толькоx
аргументы иy
аргументы, а не формулу илиdata
аргумент. Возможно, вы хотите использоватьglm
. Однакоbinomial
это неправильный выбор для непрерывного результатаPetal.Width
. Начните с чтения?glm
.3. Спасибо. Я обновил вопрос в ответ на эти комментарии.
Ответ №1:
В вашем коде есть некоторые проблемы.
Во-первых, нет необходимости создавать переменную cf
. Вы можете просто использовать iris
.
Во-вторых, glm.fit
принимает в качестве первых 2 аргумента x
и y
. Из документации, доступной по адресу ?glm.fit
:
Для glm.fit: x — проектная матрица размерности n * p, а y — вектор наблюдений длиной n.
Ваша первая строка кода используется glm
для создания переменной с именем glm.fit
— это не то же самое, что функция с этим именем.
Если вы хотите использовать glm
, эта функция может принимать формулу и имя фрейма данных в качестве аргументов. Итак, это работает:
glm(Petal.Width ~ ., data = iris)
Но это выдает ошибку:
glm(Petal.Width ~ ., data = iris, family = binomial)
Ошибка в eval(family$initialize): значения y должны быть 0 <= y <= 1
Это потому, что переменная ответа Petal.Width
непрерывна. Вы используете binomial
семейство, когда ответ принимает 2 значения (да / нет, 0/1, истина / ложь).
Комментарии:
1. ну и дела, тогда это не лучший выбор для имени переменной.