医学生都想学的纵向随访数据分析,你学会了吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了医学生都想学的纵向随访数据分析,你学会了吗?相关的知识,希望对你有一定的参考价值。
参考技术A 作者丨Lily来源丨医数思维云课堂(ID:Datamedi)
在医学临床实验研究中,我们经常会收集到患者的多次 重复测量纵向随访数据 ,即每一个患者都有多次观测值,这些观测值是在不同时间记录的,观测次数、时间和间隔都不一定一样,且多次观测值都具有潜在相关性,往往在做分析时是我们更需要关注的。
那么问题来了,面对不同于我们经常收集到的横断面数据,该如何处理分析这些纵向数据呢?别急,听我慢慢道来。
针对 纵向随访数据 ,结合数据特点,应利用 线性混合效应模型 进行建模。该模型包含了 固定效应以及随机效应 ,其中随机效应描述的是在不同层次的不同水平中,各变量对总体观察变量的贡献。
那针对线性混合效应模型,如何建模分析呢?今天我推荐R语言当中线性混合效应模型的两个包:
1、 nlme包,这是相对成熟的R包,它除了可以分析分层的线性混合效应模型,也可以处理非线性模型。在优势方面,个人认为它可以处理相处复杂的线性和非线性模型,可以定义方差协方差结构,也可以在广义线性模型中定义连接函数。缺点呢,随机效应的定义过于呆板,并且当数据量很大时,速度很慢,也不能处理多元数据。
2、 lme4包,相对于nlme包而言,它的运行速度快一点,对于固定效应、随机效应的结构也可以相对更复杂一点。但是不能处理协方差和相关系数结构。
接下来通过案例,让我们更好的理解这个模型:
例: 牛奶蛋白质含量 这个数据是纵向数据的一个典型的例子。曾经被Diggle,et.al.(2013)等研究过,这个数据关于79头澳大利亚的奶牛牛奶蛋白质含量和三种饲料的关系,对每一头奶牛计划观测19次,每周一次,但是结果得到,有些奶牛观测了19周,有些不到19周,还有最少的观察了12次。
变量名称变量解释
id牛的编号
week第几周
protein蛋白质含量
diet饲料种类:1.barley;2.lunpins;3.mixed
01 数据的基本描述
library(lattice)
data_milk<-read.csv("milk.csv")
head(data)
xyplot(protein ~ week | diet, data = data_milk,
type = c("b", "smooth"), lwd = 2,
as.table = TRUE, ylab = "protein",
xlab = "Time (weeks)")
02 建立线性混合效应模型
1、 nlme包
library(nlme)
model1<-lme(protein~week+diet,random=~week|id,data_milk,method="ML")
summary(model1)
结果如下:
接下来我们可以用 F检验来看各个变量的显著性 :
anova(model1)
结果如下:
通过上述结果来看,两个变量都显著,但week的系数是负数,这是由于总体上,一开始试验时牛奶的蛋白质含量大多相对较高,后面有几周下降,然后有回升,所以总体来说似乎随时间是下降的。
2、 lme4包 ,但是推荐使用 lmerTest包 ,它的结果可以 输出P值 ,即显著性结果值。
library(lme4)
library(lmerTest)
model2<-lmer(protein~week+diet+(week|id),data_milk)
summary(model2)
结果如下:
通过上述两个包建立的模型可以看出,得到的结果几乎一样,但是 lmer()函数 针对变量较多时建立模型较好,运行速度较快。同时也可以看得出,我们的响应变量是定量变量,因此,我们选择建立线性混合效应模型,但若是我们的 响应变量是分类变量 ,那方法就不一样咯。
怎么样?是不是挺简单的,希望大家多多练习。如果你有关于回归分析方面的问题,可以及时联系我,我一定不遗余力哟,期待我们的再次相约。
90%测试猿都想学的Jmeter技能,你get吗?
01. 前言
jmeter 这个工具既可以做接口的功能测试,也可以做自动化测试,还可以做性能测试,其主要用途就是用于性能测试。但是,有些公司和个人,就想用 jmeter 来做接口自动化测试。
你有没有想过呢?
下面我就给大家讲讲,用 jmeter 如何做接口自动化测试。
02. jmeter 与接口自动化测试
如果要你用 jmeter 来做接口自动化测试,你是不是把几乎每一个测试用例,都是用一个取样器来实现?
相信很多人都是这么想的,也是这么干的。
但是,很遗憾,你这种,是初级入门做法。你能实现所有的测试用例都被执行,但是,你写脚本和维护脚本的时间,可能比你用手工执行所有的测试用例时间还要长,而且还可能长很多。
因为,只要开发人员改了接口一个地方,你得从所有取样器中,找出与这个接口相关的所有取样器,然后一一修改,万一有遗漏,哪出现的失败,不是 bug,而是你脚本的问题。所以说,这是入门级人干的事情。
那有没有更好的办法呢?
平时写功能测试用例的时候,习惯用 Excel 的同学,可能就会想,我能把自动化测试用例每个信息都写在 Excel 表格中,然后,使用 jmeter 的 CSV 数据文件读取功能,把它读取出来执行,是不是就可以呢?
这种方法,就比前面的方法好了很多,用例还是用 Excel 来维护,只是使用 jmeter 来读取,执行就可以了。整体的可维护性要好很多很多,工作量也要少很多。
但是,在真正动手去做的时候,我们又会发现,困难重重。
写过自动化测试用例的同学,应该会有这样的经历,就是做接口测试时,我们通常会先对某个接口各种参数进行测试,这样,接口地址相同,但是参数不一样,校验的接口也一样。
在做完单个接口之后,我们还会做由多个接口构成的业务测试,这个时候,每个接口地址都不一样,接口请求的方法也可能不一样,最后的校验点,也可能变化,这样的自动化脚本,应该要怎么写呢?
第一个对单接口,编写自动化测试脚本,可能还好实现,因为接口相同,那么他的请求方法肯定相同,虽然,请求头、请求体、校验信息可能不同,但是,至少还有共同点。
而第二个,对业务编写自动化测试脚本,那就很难了,因为几乎所有的都可能不同,请求的协议、方法、请求头、请求体,全都可能不同,而且请求头和请求体还可能要有动态值,这个怎么做呢?
万事开头难,只怕去实践。只要你想好了,真正去动手做了,这很多问题,就不那么难了。
有很多事情,我们可以加条件判断,和循环控制等逻辑控制器,就可以实现的。
靠我一篇文章,就把它全部写出来,这是不现实的,所以,今天,主要讲一个,被很多同学问到,难倒了一大片好汉的问题。
看到这个问题,你想到什么方法?
03. 实操案例
如果你在 jmeter 中,每个接口写一个取样器,这个问题很好解决,直接使用参数引用就可以解决,但是,这个同学的做法是把测试用例写在 CSV 文件中,然后使用 jmeter 去读取 CSV 文件,执行测试用例,如何来实现动态参数呢?
肯定,有的同学已经想到了,使用变量引用,在 CSV 中,按照 jmeter 的写法,写引用变量。
好了,给大家一个看一个参考:
这个 CSV 文件中,有两个不同的接口,说明是做的业务场景自动化测试,第一个接口,是注册,那么每次注册的账户肯定不能相同,如果相同了,那么第二次肯定失败,所以,就使用了随机函数,让注册的账户自动生成。
第二个接口是登录,当然,可以用固定账户登录,但是,我们前面进行注册,最好还是用前面注册的账户来登录,这样更加真实,body 中使用了变量引用,显然,这是用到了关联。
我们用 jmeter 写个脚本,来运行下,看能否成功。
从脚本来运行情况来看,我们可以取到名称,地址,和请求体,但是,因为请求体在 CSV 中写了 jmeter 函数,结果读取出来运行时,还是原样运行,并没有对请求体中的函数进行执行。
怎么办呢?
很多人,就卡在这了,不知道怎么办了。
其实,我们想一下,现在是内容读取出来了,但是内容是原样进行请求,没有对内容中的函数进行执行,现在的问题,只需要解决 body 中的函数,能被运行就可以了。
我们再想下,在 jmeter 中,有哪些可以运行函数的方法?jexl3 函数可以,groovy 函数可以。
04. Exl3 函数
jexl3 函数,是要运行一段代码,返回代码结果,我们的 body 是 JSON 格式,显然不能直接运行,要想运行,还得写 Java 代码调用 JSON 运行才可以,非常复杂。
groovy 函数,是要运行一个表达式,显然,也不行。
那还有没有其他的函数呢?eval 函数,这个函数,返回的是字符串表达式运行的结果。
此时,我们修改下我们 jmeter 中取样器的请求体。
看,运行结果,函数被执行了,注册的账号动态变化了。
接下来,我们就把第 2 条用例,使用了关联,也写出来。
现在,我们已经实现,在 jmeter 中,使用一个取样器执行 2 个不同接口,并且动态参数值的自动化运行了。
现在,我们再把断言加上。
注意:断言中,如果有中文,就要特别注意文件编码
现在,我们再加大难度,在 CSV 文件中写个 GET 接口。
我们发现,多个接口请求方法不一样,jmeter 肯定不能用 1 个取样器了, get 请求没有 body 参数,但是,请求头要添加一个 Token 参数。
是不是一下楞圈了,不知道怎么动了?看懂下面的图,你就知道怎么做了。
在取样器的前面增加一个条件判断,判断是请求方法,根据请求方法,执行 POST 取样器或 GET 取样器
然后,把循环次数设置为 CSV 文件条数一致,其他的地方,应该就比较容易理解了。
05. END
看最后,多条测试用例,只用 2 个取样器就搞定了。以后,改动 CSV 文件,可能都不用动 jmeter 脚本,增加测试用例,改下循环控制器数量就可以了。
当然,这还不是最完美的,里面还有诸多不足。给想用 jmeter 做接口自动化测试的同学开了个头,更多的,还需要同学们自己动手,也欢迎同学们,在文章后面留言讨论。
注意,这篇文章的技术,只适合在自动化中,不能用这个脚本进行性能测试。
最后: 可以关注公众号:伤心的辣条 ! 进去有许多资料共享!资料都是面试时面试官必问的知识点,也包括了很多测试行业常见知识,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
好文推荐
转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!
以上是关于医学生都想学的纵向随访数据分析,你学会了吗?的主要内容,如果未能解决你的问题,请参考以下文章