如果您有B,这是一个0/1结果变量,S,这是一个连续变量,并且T,这是一个治疗虚拟变量,您如何使用回归结果和图表来显示假设的非线性效应?
例如,我假设治疗对S's 分布中间的人最重要。
我一直在运行的回归是B = S + T + ST.
任何关于该主题的引用也将不胜感激。
如果您有B,这是一个0/1结果变量,S,这是一个连续变量,并且T,这是一个治疗虚拟变量,您如何使用回归结果和图表来显示假设的非线性效应?
例如,我假设治疗对S's 分布中间的人最重要。
我一直在运行的回归是B = S + T + ST.
任何关于该主题的引用也将不胜感激。
下面使用 Rrms包使用普通最小二乘建模,并在默认节点位置使用 4 个节点的受限三次样条平滑地建模非线性效应。这将为每个治疗组总共 3 个参数生成一个线性分量和 2 个非线性分量。
require(rms)
dd <- datadist(mydata); options(datadist='dd') # facilitates plotting
f <- ols(B ~ rcs(S, 4) * T, data=mydata)
anova(f) # tests for interaction (shape differences across T, 3 d.f.)
# anova includes a test for nonlinear interaction
# also provides a global test for T, 4 d.f.
plot(Predict(f, S, T)) # shows 2 estimated curves for 2 values of T
ggplot(Predict(f, S, T)) # will be in next release; uses ggplot2
这些图包括 0.95 个逐点置信带。可以选择使用同时置信带。
因为我在其他地方看到了“ols”,所以我忽略了响应变量是分类的。要拟合逻辑回归模型而不是 ols 模型,请替换lrm( )为ols( ). 不需要其他代码更改。您可以使用summary(f, ...)获取 T 或 S 的优势比。默认情况下,S 的优势比将是 S 在 T 的参考(最频繁)水平上的四分位间距效应。
这正是几年前我从 Stata 切换到 R 和 Frank 的 rms 包(当时称为 Design)的原因。
无论如何,这个有点hack-ish的代码至少会让你开始。语法有点过时,可能有更好的方法来编码(有一段时间没有使用Stata),但它就在这里
编辑:在我早上喝咖啡后重新写...
*** use automobile data
sysuse auto
*** create restricted cubic spline basis functions for mpg, with four knots
mkspline mpgsp = mpg, cubic nknots(4)
*** create the interactions
gen formpg1=foreign*mpgsp1
gen formpg2=foreign*mpgsp2
gen formpg3=foreign*mpgsp3
*** Regressing price on foreign and mpg allowing for non-linear interactions
xi: reg price i.foreign mpgsp* formpg*
测试总交互
test formpg1 formpg2 formpg3
省略任何非线性交互项测试的第一项,例如
test formpg2 formpg3
要获得 的全局 4 df 测试T,在这个例子中是外来的,弗兰克在上面的例子中提到
test _Iforeign_1 formpg1 formpg2 formpg3
只需更改reg为logit逻辑回归即可。要绘制结果,您需要形成线性预测器,例如使用predictnl,我从来没有设法做对。
有关一些想法,请参阅 Patrick Royston 最近在http://www.stata.com/meeting/germany12/abstracts/desug12_royston.pdf上的演讲。
希望这可以帮助。
您是否考虑过使用广义加法模型? 维基百科链接在这里
基本上模型是
或在您的特定情况下
mgcv包,并运行类似
library(mgcv)
m = gam(B~te(S,T),family=binomial)
这将为您提供两个变量的非参数交互。如果您想从交互效果中分离出主要效果,您可以等效地拟合
m = gam(B~ti(S)+ti(T)+ti(S,T),family=binomial)
plot(m,pages=1, scheme=2)然后,您可以通过(我更喜欢等高线图,我自己)查看估计交互的等高线图,或者您可以使用该vis.gam函数查看预测值。
或者,如果您的治疗T是二元的,您可能适合
m = gam(B~s(S,by=as.factor(T)),family=binomial)
所有这一切的教科书都是与 R 包一起制作的,这里是Simon Wood 的。
您还需要检查?te,?ti等。
您可以通过证明非线性模型更适合来争论非线性效应。例如,您可以实施分段线性模型以考虑 S 影响的变化。根据您的假设,您还可以线性化您的因素。例如,因子的对数变换可能会减少残差。这可以用来论证因子和响应之间的关系不是线性的,因为转换后的变量拟合得更好。我希望这会有所帮助。