今天给大家分享一个新的统计方法,叫做响应面分析,响应面分析是用来探究变量一致性假设的(Congruence hypotheses)。本身是一个工程学方法,目前在组织行为学,管理,市场营销等等领域中使用越来越多。

Congruence hypotheses state that the agreement (i.e., congruence) between two constructs should positively (or negatively) affect some outcome variable. Such hypotheses play a central role in many disciplines, for example, Marketing (Kim & Hsieh, 2003), Organizational Behavior (Caniëls & Veld, 2019), and Purchasing (Caniëls, Vos, Schiele, & Pulles, 2018).

响应面分析尤其是在探究一致性和不一致性作用的时候是最佳选择,就是说比如你有两个自变量,一个因变量,你想看看如果这两个自变量都同时一致性变化(同时增大或减小)和同时不一致变化(一个增大另一个减小)的情况下,因变量如何变化。这个时候一定记得使用响应面分析。

一致性假设的检验需要涉及到多项式回归,而响应面分析的优势在于可以其可以将多项式回归的结果用3D画出来,从而使得我们看清楚各种自变量组合情形下因变量的变化情况。并且通过多项式的系数情况对相应假设进行证明。

并且响应面分析还可以检验交互,且不受线性假设限制,今天结合两篇比较有意思的文献给大家分享响应面分析的理解和具体做法。

理论理解

想想如果你不知道响应面分析,你想研究两个变量的不一致对结局的影响你会怎么做?比如你想研究父母期望x1和儿童兴趣x2对儿童成就y的影响,想要验证是不是父母期望和儿童兴趣的一致性越强,将来儿童的成就越高?你怎么做?

计算一个新变量?x1-x2再取个绝对值,作为新的自变量,叫做两者差距?用这个新变量去做y的回归分析?

估计大部分同学首先想到的就是这么样操作。

这里面有两个问题:1是信息丢失了;2是你不能知道同一个效果到底是x1比x2大造成的,还是x2比x1大造成的。

所以说这个想法就不好,不能说不对哈,只能说不好。

此时最正确的方法就是使用多项式回归:

R数据分析:多项式回归与响应面分析的理解与实操-LMLPHP

上面的式子中xy为两个自变量,Z是因变量,式子中还有xy的2次项,对于这么一个式子我们可以对其图形化表达

R数据分析:多项式回归与响应面分析的理解与实操-LMLPHP

图中两个自变量在xy轴上,因变量或者叫模型的响应值在z轴上,这样所有xy组合取值对应的模型响应值便成了一个曲面,叫做响应面。

比如对应特定的xy在底面对应的圈圈,其对应的Z值就是响应面上的星星。

看图的时候有两条线值得我们格外关注:图中的一致性线Line of congruence (LOC)和不一致线Line of incongruence (LOIC)

  • 一致性线

一致性线就是所有xy相等的点组成的线,就是xy平面上的一条45°线,这条线对应的响应面就表示一致性变化时z值的变化。在图中就是上图中的红线对应的响应面,可以看到在xy一致的时候Z值始终是最大的。

  • 不一致线

不一致线就是所有xy互为相反数的点组成的直线,就是xy平面上和一致性线垂直的线,在上图中就是xy平面上的蓝色的线,可以看到xy的差距越大,Z的值越低。

通过这么一种可视化的表达,我们就可以非常容易的知晓xy所有变化情况下,Z的具体变化情况。

并且结合多项式模型的系数情况我们还可以对相应的假设进行检验

我们回到一致性线所对应的响应面,在这个响应面上x=y,Z的表达式就成了一个二次函数:

Z = a1X + a2X2,其中a1 = b1 + b2 and a2 = b3 + b4 + b5

系数a2决定了对应的响应面是直线还是曲线,a1就决定了对应的响应面的斜率。

再看不一致线所对应的响应面,在这个响应面上x=-y,Z的表达式也是一个二次函数:

Z = a3X + a4X2,其中a3 = b1-b2 and a4 = b3-b4 + b5

系数a4决定了对应的响应面是直线还是曲线,a3就决定了对应的响应面的斜率

根据系数的不同组合反应在图中就有响应面的不同的形状:看下图,比如a1>0(一致性线对应的Z值为斜率向上的直线),a4<0(非一致性线对应的响应面为开口向下的曲线)的时候对应的图就是下面A图;比如a2和a4都<0时两条线对应的响应面都为开口朝下的曲线,整个响应面的形状就是下面D图:等等:

R数据分析:多项式回归与响应面分析的理解与实操-LMLPHP

通过上面介绍的系数我们就可以对相应假设进行验证,接着往下我们来看两篇实际例文。

一篇文献名如下:

文章做了低头族这一行为习惯对抑郁发生的影响,同时考虑了父母低头和孩子低头,在形成了多项式回归模型后,选取变量进行了响应面分析,主要结果长这样:

R数据分析:多项式回归与响应面分析的理解与实操-LMLPHP

作者把关心的两个自变量一个是父母低头,另一个是孩子自己低头,放在xy轴上;把因变量孩子抑郁放在z轴上,通过这样一种图形化表示就可以看得出来,x和y一致增大的时候和xy变化不一致的时候抑郁的变化,从而回答研究问题。

结果呈现上作者报告了一致性线的系数和p值,从而回答假设4:

R数据分析:多项式回归与响应面分析的理解与实操-LMLPHP

就是一致性线的斜率是显著的正值,就意味着家长和孩子都是低头族(一致性的低头)孩子抑郁风险会增大。同时还有不一致性线的系数也是同理理解。

作者通过这么一个分析还检验了调节作用,方法部分的原文叙述见下图,用的方法叫做hierarchical regression analysis:

R数据分析:多项式回归与响应面分析的理解与实操-LMLPHP

就是嵌套几个回归,然后比较模型的R方从而数据驱动的角度判断交互项是不是应该存在。原理在于:加上交互项后R方显著变大,说明交互项的加入可以显著地增大模型的解释力度。

再看一篇管理学领域的文章:

在验证下面两个假设的时候文章使用了响应面分析:

NPD performance will increase as both exploitation and exploration increase simultaneously.

NPD performance will decrease as the imbalance between exploitation and exploration increases in either direction.

依然是探讨两个自变量变化趋势的一致和不一致问题,作者给了图和表格来回答研究假设:

R数据分析:多项式回归与响应面分析的理解与实操-LMLPHP
R数据分析:多项式回归与响应面分析的理解与实操-LMLPHP

原文中假设5的意思是两个自变量同时变大的情况下,因变量也会随之增大,为了验证这个假设,文章是令将原来的多项式回归中的两个自变量相等,简化方程后看回归系数,回归方程简化后就是一个二次函数了,此时满足假设5的条件就是二次项的系数得为0(二次项得不显著,不然函数是个曲线,就不满足假设5因变量一直增长的假设,请回忆初中二次函数的知识点)然后一次项得是负值。

也就是上表中b1+b2得是正的,然后b3+b4+b5得不显著,因为第二个条件不满足所以作者得到了假设5不成立的结论。

同理,假设6认为,两个自变量不一致的情况下,因变量会变小,为了验证这个假设,文章是令两个自变量为相反数,此时要满足假设6的条件就需要,简化后的方程的一次项系数应该为显著的负值,二次项应该为0或显著负值。

也就是上表中b1-b2应该为显著负值,然后b3-b4+b5应该为0或负值,因为两个条件都不满足所以作者得到假设6不成立的结论。

R数据分析:多项式回归与响应面分析的理解与实操-LMLPHP

通过这样的一图一表,文章就完成了对研究问题的回答。以上就是响应面分析的两个例文的简要介绍,详细写作请自己扒拉原文瞅瞅。我们接着看做法。

做法步骤

spss是可以做响应面分析的哈,不过我们依然只写用R的方法,做响应面分析步骤有二:

在R中做响应面分析可以用rsm包,第一步是拟合带有2次项的多项式回归,比如我现在有如下数据,x,y,z三个变量

R数据分析:多项式回归与响应面分析的理解与实操-LMLPHP

首先我需要跑一个二次多项式回归:

rsm(z ~ SO(x, y), data = data)

运行后直接summary上面函数生成的对象即可得到二次多项式的结果

R数据分析:多项式回归与响应面分析的理解与实操-LMLPHP

可以看到xy每个项的系数都有展示,我们就是结合这些系数来验证我们的研究假设。

第二步便是将模型结果通过响应面进行可视化展示,代码如下:

persp (rsm, ~x+y, 
       col = color,main="实例操练",
       xlab=c("关注公众号","Codewar"),zlab = "示例",
       r=50,d=30,expand=1,box = T,
       #ltheta=10,lphi=99,
       shade=0.1,theta=-15,phi=15,
       #axes=F,
       contour=list(z="bottom"),
       cex.lab=1,
       cex.axis=0.5,
       ticktype="detailed",
       at = xs(rsm))

上面代码中rsm为模型对象。运行后即可出响应面图如下:

R数据分析:多项式回归与响应面分析的理解与实操-LMLPHP

通过上图就可以很直观地看到xy不同变化时,z值的对应变化。

到此响应面分析结束。

06-02 04:26