Как правильно использовать веса в логистической регрессии в R? - PullRequest
1 голос
/ 01 июля 2019

Мои данные включают в себя данные опроса покупателей автомобилей. У моих данных есть весовой столбец, который я использовал в SPSS для получения размеров выборки. Вес столбца зависит от демографических факторов и продаж автомобилей. Сейчас я пытаюсь собрать модель логистической регрессии для автомобильного сегмента, который включает несколько транспортных средств. Я хочу использовать столбец веса в модели логистической регрессии, и я попытался сделать это, используя «веса» в функции glm. Но результаты ужасны. Отклонения слишком высоки, McFadden Rsquare слишком низок. Моя зависимая переменная является двоичной, независимые переменные имеют шкалу от 1 до 5. Вес столбца числовой, колеблется от 32 до 197. Может ли это быть причиной плохих результатов? Нужно ли иметь значения в столбце веса ниже 1?

Формат входного файла в R - -

WGT output I1 I2 I3 I4 I5
67   1      1  3  1  5  4

I1, I2, I3 - независимые переменные

logr<-glm(output~1,data=data1,weights=WGT,family="binomial")

logrstep<-step(logr,direction = "both",scope = formula(data1))\

logr1<-glm(output~ (formula from final iteration),weights = WGT,data=data1,family="binomial")

hl <- hoslem.test(data1$output,fitted(logr1),g=10)

Я хочу модель логистической регрессии с большей точностью и лучше понять использование весов с логистической регрессией

1 Ответ

0 голосов
/ 01 июля 2019

Я бы проверил пакет survey. Это позволит вам указать веса для плана опроса, используя функцию svydesign. Кроме того, вы можете использовать функцию svyglm для выполнения вашей взвешенной логистической регрессии. См. http://r -survey.r-forge.r-project.org / survey /

Примерно так: при условии, что ваши данные находятся в фрейме данных с именем df

my_svy <- svydesign(df, ids = ~1, weights = ~WGT)

Тогда вы можете сделать следующее:

my_fit <- svyglm(output ~1, my_svy, family = "binomial")

Для полного представления проверьте приведенный ниже пример

library(survey)

# Generate Some Random Weights
mtcars$wts <- rnorm(nrow(mtcars), 50, 5)

# Make vs a factor just for illustrative purposes
mtcars$vs <- as.factor(mtcars$vs)

# Build the Complete survey Object
svy_df <- svydesign(data = mtcars, ids = ~1, weights = ~wts)

# Fit the logistic regression
fit <- svyglm(vs ~ gear + disp, svy_df, family = "binomial")

# Store the summary object
(fit_sumz <- summary(fit))

# Look at the AIC if desired
AIC(fit)

# Pull out the deviance if desired
fit_sumz$deviance

Что касается ступенчатой ​​регрессии, то, как правило, это не очень хорошая методология для статистической точки зрения. Это приводит к более высокому R2 и некоторым другим проблемам, связанным с выводом (см. https://www.stata.com/support/faqs/statistics/stepwise-regression-problems/).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...