我的数据包括购车者的调查数据。我的数据有一个权重列,我在SPSS中使用它来获取样本量。重量列受人口统计因素和车辆销售的影响。现在,我正在尝试为包括几辆车的汽车细分市场建立Logistic回归模型。我想在逻辑回归模型中使用权重列,我尝试在glm函数中使用“权重”。但是结果是惊人的。 Deviances太高,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)
我想要一个具有更高准确性的逻辑回归模型,并更好地了解将权重用于逻辑回归
答案 0 :(得分:0)
我会签出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")
有关完整的reprex,请查看以下示例
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/)。