R glm为不同类型的相同分类变量生成不同的p值
问题描述:
我正在使用glm生成模型拟合。我的数据混合了整数变量和分类变量。分类变量采用代码的形式,因此是数据中的整数类型。最初,当我尝试生成模型时,我按原样传递了整数格式的分类变量并获取了模型。我正在查看p值来检查一次是否显着,并注意到一些我并不期望的变量是显着的。R glm为不同类型的相同分类变量生成不同的p值
这是当意识到可能是整数表中的分类变量形式创建一些问题。所以就像代码3可能比代码1更重要(不确定这一点,如果有人可以确认这个这将是很好的)。在做一些研究时,我发现我们可以将分类整数变量转换为因子。我做了同样的事情并重新生成了模型。
我也看到一些帖子,提到它将转换为二进制,所以我做得很好。所以,现在我有3个结果 -
- R1 >>与分类整型变量
- R2 >>与分类因子变量
- R3 >>与分类变量转换为二进制
我觉得输出1与分类整型变量不正确(请确认)。但是,输出2和3之间我很困惑考虑哪一个作为
- p值是不同的,
- 哪一个会更准确
- 我能与输出3的p值与输出2?
- 如何GLM手柄这样的变量
- 希望GLM里面for循环是不是一个问题
- 我的数据库大,可我们确实使用data.table GLM?
我粘贴下面我的代码有一些样本数据将被再现
library("plyr")
library("foreign")
library("data.table")
#####Generating sample data
set.seed(1200)
id <- 1:100
bill <- sample(1:3,100,replace = T)
nos <- sample(1:40,100,replace = T)
stru <- sample(1:4,100,replace = T)
type <- sample(1:7,100,replace = T)
value <- sample(100:1000,100,replace = T)
df1 <- data.frame(id,bill,nos,stru,type,value)
var1 <- c("bill","nos","stru")
options(scipen = 999)
r1 <- data.frame()
for(type1 in unique(df1$type)){
for(var in var1){
# dynamically generate formula
fmla <- as.formula(paste0("value ~ ", var))
# fit glm model
fit <- glm(fmla, data=df1[df1$type == type1,],family='quasipoisson')
p.value <- coef(summary(fit))[8]
cfit <- coef(summary(fit))
# create data frame
df2 <- data.frame(var = var, type = type1, basket="value",p.value = cfit[8],stringsAsFactors = F)
r1 <- rbind(r1, df2)
}
}
##### converting the categorical numeric variables to factor variables
df1$bill_f <- as.factor(bill)
df1$stru_f <- as.factor(stru)
var1 <- c("bill_f","nos","stru_f")
r2 <- data.frame()
for(type1 in unique(df1$type)){
for(var in var1){
# dynamically generate formula
fmla <- as.formula(paste0("value ~ ", var))
# fit glm model
fit <- glm(fmla, data=df1[df1$type == type1,],family='quasipoisson')
p.value <- coef(summary(fit))[8]
cfit <- coef(summary(fit))
# create data frame
df2 <- data.frame(var = var, type = type1, basket="value",p.value = cfit[8],stringsAsFactors = F)
r2 <- rbind(r2, df2)
}
}
#####converting the categorical numeric variables to binary format (1/0)
df1$bill_1 <- ifelse(df1$bill == 1,1,0)
df1$bill_2 <- ifelse(df1$bill == 2,1,0)
df1$bill_3 <- ifelse(df1$bill == 3,1,0)
df1$stru_1 <- ifelse(df1$stru == 1,1,0)
df1$stru_2 <- ifelse(df1$stru == 2,1,0)
df1$stru_3 <- ifelse(df1$stru == 3,1,0)
df1$stru_4 <- ifelse(df1$stru == 4,1,0)
var1 <- c("bill_1","bill_2","bill_3","nos","stru_1","stru_2","stru_3")
r3 <- data.frame()
for(type1 in unique(df1$type)){
for(var in var1){
# dynamically generate formula
fmla <- as.formula(paste0("value ~ ", var))
# fit glm model
fit <- glm(fmla, data=df1[df1$type == type1,],family='quasipoisson')
p.value <- coef(summary(fit))[8]
cfit <- coef(summary(fit))
# create data frame
df2 <- data.frame(var = var, type = type1, basket="value",p.value = cfit[8],stringsAsFactors = F)
r3 <- rbind(r3, df2)
}
}
为什么动态生成公式? – Koot6133
@ Koot6133,我想更改不同的变量,因此使用公式 – user1412