R语言综合实战案例

 #######影响因素完整案例

#导入spss格式的数据
library(Hmisc)
mydata <- spss.get('NO.32 配套数据.sav',use.value.labels = TRUE)

#1、单因素分析
#单因素分析的本质就是差异比较
#第2-6列是连续型被检验变量
#第1、7、8、9是无序分类被检验变量

#对于连续型被检验的差异比较,首先需要进行正态检验
#正态性检验
tapply(mydata$年龄,mydata$感染,shapiro.test)

col <- c(2,3,4,5,6)
for(i in col){
  print(colnames(mydata)[i])
  print(tapply(mydata[,i],mydata$感染,shapiro.test))
}


#基于以上的正态性检验,选择两独立样本非参进行差异比较的
#变量有:年龄(2),IgG(4),IgM(5),IgA(6)
#选择独立T比较差异的变量:维生素D(3)

#两独立非参,针对2456列
#先描述,算出四分位数
source('中位数函数.txt')
非参描述 <- aggregate(x = list(mydata[,c(2,4:6)]),
                  by = list(mydata$感染),
                  FUN = 中位数描述)

非参描述 <- t(非参描述)   #转置
colnames(非参描述) <- c('否', '是')
非参描述 <- 非参描述[-1,]


#两独立非参数检验
wilcox.test(mydata$IgG~mydata$感染, paired = FALSE)

for(i in c(2,4:6)){
  print(colnames(mydata)[i])
  print(wilcox.test(mydata[,i]~mydata$感染, paired = FALSE))
}

#提取两独立非参数检验的P值
res1 <- NULL
for(i in c(2,4:6)){
  res1i <- print(wilcox.test(mydata[,i]~mydata$感染, paired = FALSE))
  res1 <- rbind(res1, res1i)
}
非参P <- res1[,3]
非参P <- do.call(rbind, 非参P)#转换成matrix
非参P <- data.frame(非参P)
非参P$Z <- qnorm(非参P$非参P/2)
非参描述 <- data.frame(非参描述)
非参描述 <- data.frame(非参描述, 非参P$Z, 非参P$非参P)

 

#两独立样本T检验
source('均值标准差函数.txt')
T描述 <- tapply(mydata$维生素D,mydata$感染, 均值标准差函数)
T描述 <- data.frame(T描述)
T描述 <- t(T描述)
rownames(T描述) <- '维生素D'
k <- t.test(mydata$维生素D~mydata$感染, paired = FALSE)
T描述$T <- 17.557
T描述$P <- '<0.001'

 

#连续变量的差异结果汇总
T描述 <- edit(T描述)
非参描述 <- edit(非参描述)
连续汇总 <- rbind(T描述[1,], 非参描述[1:4,])
write.csv(连续汇总, '连续汇总.csv')

#分类型变量的差异比较
#卡方检验
library(gmodels)
CrossTable(mydata$性别,mydata$感染, chisq = TRUE,
           expected = TRUE,
           fisher = TRUE)

res2 <- NULL
for(i in c(1,7:9)){
  print(colnames(mydata)[i])
  res2i <- CrossTable(mydata[,i],mydata$感染, chisq = TRUE,
                      expected = TRUE)
  res2 <- rbind(res2, res2i)
}

人数 <- res2[,1]
人数 <- do.call(rbind,人数)

行占比 <- res2[,2]
行占比 <- do.call(rbind,行占比)

卡方结果 <- res2[,5]
卡方结果 <- do.call(rbind,卡方结果)

卡方值 <- 卡方结果[,1]
卡方值 <- do.call(rbind,卡方值)

卡方P <- 卡方结果[,3]
卡方P <- do.call(rbind,卡方P)

人数 <- data.frame(人数)
行占比 <- data.frame(行占比)
人数行占比 <- edit(人数行占比)
人数行占比 <- cbind(人数,行占比)
人数行占比$合并 <- paste0(人数行占比$否,'(',
                   round(人数行占比$ZBF*100,2),'%',')')

人数行占比$合并2 <- paste0(人数行占比$是,'(',
                   round(人数行占比$ZBT*100,2),'%',')')
提取 <- 人数行占比[,5:6]
colnames(提取) <- c('人数(占比否)','人数(占比是)')

 

 基于以上的单因素分析可以清晰得出,维生素D、IgG、IgA、糖尿病、高血压这几个因素通过了单因素筛查,需要保留参与后续的多因素分析;而感染和未感染两组在年龄、IgM、性别、冠心病这几个因素不存在显著差异,因此这几个因素可以直接删除。

 #2、多因素分析
#基于以上的单因素分析可以清晰得出,
#维生素D、IgG、IgA、糖尿病、高血压这几个因素通过
#了单因素筛查,需要保留参与后续的多因素分析;
#而感染和未感染两组在年龄、IgM、性别、冠心病这
#几个因素不存在显著差异,因此这几个因素可以直接
#删除。 

#以维生素D、IgG、IgA、糖尿病、高血压为自变量,
#术后感染为因变量,
#进行二元logistic回归分析


str(mydata)

model <- glm(mydata$感染=='是'~mydata$维生素D
             +mydata$IgG
             +mydata$IgA
             +mydata$糖尿病
             +mydata$高血压,
             family = binomial,
             data = mydata)
res3 <- summary(model)

table <- res3$coefficients
table <- data.frame(table)
table$OR <- exp(table[,1])
confint <- confint(model)#置信区间
confint <- data.frame(confint)
table <- cbind(table, confint)
table$OR_LL <- exp(table[,6])#OR的下置信区间
table$OR_UL <- exp(table[,7])
write.csv(table, 'table.csv')
#以上的多因素分析全部完成

 

从以上的运算结果可以清晰看到:

  • IgG、糖尿病、高血压不是术后感染的独立影响因素,P值全部大于0.05;
  • 维生素D是术后感染的独立影响因素,P<0.05;更进一步,维生素D的回归系数为-0.395<0,意味着维生素D越小越容易出现术后感染。
  • IgA是术后感染的独立影响因素,P<0.05;更进一步,IgA的回归系数为-1.048<0,意味着IgA越小越容易出现术后感染。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
R语言实战案例源代码是指在学习R语言时,通过实践编写的一系列案例代码。这些案例包含了不同领域的数据分析、数据可视化、机器学习等应用,能够帮助学习者将理论知识转化为实际操作技能。 R语言实战案例源代码一般由R语言脚本组成,通常以.R或.Rmd为文件后缀。这些代码会用到R语言中的各种函数和包,通过这些代码可以学习如何使用不同的函数来处理和分析数据,以及如何利用各种包进行图形生成和模型建立。 例如,一个简单的R语言实战案例是通过R语言来分析某公司的销售数据。案例的源代码可能包含以下步骤: 1. 导入数据:使用read.csv()函数或其他适用函数导入销售数据集。 2. 数据预处理:对数据进行清洗,包括处理缺失值、删除异常值等。 3. 数据分析:使用各种统计函数进行数据分析,如sum()、mean()等。 4. 可视化:利用ggplot2包绘制数据的可视化结果,如柱状图、散点图等。 5. 模型建立:应用机器学习算法,如线性回归、决策树等,进行数据建模和预测。 这只是一个简单案例的源代码示例,实际案例可能更加复杂,涉及更多的数据预处理、特征工程、模型选择等步骤。学习者可以根据自己的需求选择合适的案例源代码进行学习和实践。同时,也可以通过阅读他人的案例源代码来学习其他R语言编程技巧和实战经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值