使用用户定义的对比代码进行简单的斜率分析以进行回归

时间:2019-05-29 21:52:40

标签: r regression interaction

我正努力使用用户定义的对比代码进行线性回归,并对对比代码与分类主持人和连续主持人之间的重大相互作用进行简单的斜率分析。我进行了一项干预,以提高三个治疗组(即心态,价值,心态加价值)和一个对照组的成绩,现在想看看具体干预水平与各种理论上相关的分类变量(例如性别)之间是否存在相互作用,免费午餐状态以及前两个学期的平均GPA低于平均水平的二进制指标,以及相关的连续变量,例如干预前的信念(下面的示例数据框中的Imp_pre.C和Val_pre.C)。连续的主持人已经居中居中。

#subset of dataframe
mydata <- structure(list(cond = structure(c(1L, 2L, 3L, 3L, 2L, 3L,     1L,2L, 2L, 1L), contrasts = structure(c(-0.25, 0.0833333333333333,0.0833333333333333, 0.0833333333333333, -1.85037170770859e-17,-0.166666666666667, -0.166666666666667, 0.333333333333333, 0,-0.5, 0.5, 0), .Dim = 4:3, .Dimnames = list(c("control", "mindset","value", "MindsetValue"), NULL)), .Label = c("control", "mindset","value", "MindsetValue"), class = "factor"), sis_mp3_gpa = c(89.0557142857142,91.7514285714285, 94.8975, 87.05875, 69.9928571428571, 78.0357142857142,87.7328571428571, 83.8925, 61.2271428571428, 79.8314285714285), sis_female = c(1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L), low_gpa_m1m2 = c(0,0, 0, 0, 1, 1, 0, 0, 1, 0), sis_frpl = c(0L, 1L, 0L, 0L, 1L,1L, 1L, 1L, NA, 0L), Imp_pre.C = c(1.80112944983819, -0.198870550161812,1.46112944983819, -0.198870550161812, 0.131129449838188, NA,-0.538870550161812, 0.131129449838188, -0.198870550161812, -0.198870550161812), Val_pre.C = c(-2.2458357581636, -2.0458357581636, 0.554164241836405,0.554164241836405, -0.245835758163595, NA, 0.554164241836405,0.554164241836405, -2.0458357581636, -1.64583575816359)), row.names = c(323L,2141L, 2659L, 2532L, 408L, 179L, 747L, 2030L, 2183L, 733L), class = "data.frame")

由于我只对特定的对比感兴趣,因此我创建了以下用户定义的对比代码。

mat = matrix(c(1/4, 1/4, 1/4, 1/4, -3, 1, 1, 1, 0, -1, -1, 2, 0,
mymat = solve(t(mat))
mymat
my.contrasts <- mymat[,2:4]
contrasts(mydata$cond) = my.contrasts

这应该使我可以将治疗条件(即心态,价值和心态加价值)与对照组进行对比;心态加上对心态和价值条件的价值;以及对价值条件的看法。但是,基于“ mymat”的输出(请参阅下文),思维定式加值到思维定式和值对比无法正常工作,因为第三列中的第一个单元格不为0,这应该是因为该行代表控件条件。

      [,1]        [,2]          [,3] [,4]  
[1,]    1 -0.25000000 -1.850372e-17  0.0  
[2,]    1  0.08333333 -1.666667e-01 -0.5  
[3,]    1  0.08333333 -1.666667e-01  0.5  
[4,]    1  0.08333333  3.333333e-01  0.0

问题1:有谁知道为什么第3列的第一个单元格不为0,以及如何解决此问题?

我正在测试以下模型:

#model
model1 <- lm(sis_mp3_gpa ~ cond +
               sis_female*cond +
               low_gpa_m1m2*cond + 
               sis_frpl*cond +
               Imp_pre.C*cond + 
               Val_pre.C*cond + 
               Imp_pre.C + Val_pre.C +
               low_gpa_m1m2 + sis_female +
               sis_frpl , data = mydata)
summary(model1)

在完整的数据集中,对比二(比较思维定式加值到思维定式和值)与先前的值信念(即Val_pre.C)之间存在显着的交互作用,并且此对比代码与前两个的gpa低之间存在显着交互作用个学期。为了解释重要的交互作用,我想为个人生成一个预测值,该值在连续主持人和类别主持人的两个级别的均值下方和上方均比标准偏差大。我的问题是,当我尝试执行此操作时,这些图包含每种条件的预测值,而不是折叠思维定势和价值条件,并排除控制条件。另外,当我尝试进行简单的斜率分析时,我只能获得所有四个条件的成对比较,而不是我感兴趣的对比。

问题2:如何为对比代码以及分类连续的主持人绘制预测值并进行简单的斜率分析?

1 个答案:

答案 0 :(得分:0)

由于两个原因,无法回答此问题:(1)mat的代码不完整且无法运行,(2)模型严重适合提供的子集数据,导致0d.f。错误,无法进行任何测试。

但是,这里是对一个更简单的模型的分析,该模型可能显示了如何执行所需的操作。

> simp = lm(sis_mp3_gpa ~ cond * Imp_pre.C, data = mydata)

> library(emmeans)
> emt = emtrends(simp, "cond", var = "Imp_pre.C")

> emt   # estimated slopes
 cond    Imp_pre.C.trend    SE df lower.CL upper.CL
 control            1.97  7.91  3    -23.2     27.1
 mindset            1.37 42.85  3   -135.0    137.7
 value              4.72 12.05  3    -33.6     43.1

Confidence level used: 0.95 

> # custom contrasts of those slopes
> contrast(emt, list(c1 = c(-1,1,0), c2 = c(-1,-1,2)))
 contrast estimate   SE df t.ratio p.value
 c1         -0.592 43.6  3 -0.014  0.9900 
 c2          6.104 49.8  3  0.123  0.9102