我是一个新手编码,所以这可能很简单,但我不知道我在做什么。
我有实验动物工作的行为数据,动物被记录了5次行为试验(HT、T1、T2、T3、T4),并报告了它们接受电击的次数,我在这个数据集中有两组动物,一个实验组和一个对照组(分别为TR和UT)
cohort animalID trial num.shocks
1 TR 295727 HT 211
2 TR 295727 T1 20
3 TR 295727 T2 10
4 TR 295727 T3 4
5 TR 295727 T4 1
6 TR 295729 HT 161
7 TR 295729 T1 55
8 TR 295729 T2 56
9 TR 295729 T3 53
10 TR 295729 T4 53
11 TR 295731 HT 153
12 TR 295731 T1 19
13 TR 295731 T2 2
14 TR 295731 T3 0
15 TR 295731 T4 8
16 UT 295734 HT 197
17 UT 295734 T1 174
18 UT 295734 T2 155
19 UT 295734 T3 175
20 UT 295734 T4 155
21 UT 298736 HT 172
22 UT 298736 T1 178
23 UT 298736 T2 164
24 UT 298736 T3 133
25 UT 298736 T4 161
26 UT 298737 HT 168
27 UT 298737 T1 187
28 UT 298737 T2 119
29 UT 298737 T3 174
30 UT 298737 T4 155
31 TR 300844 HT 170
32 TR 300844 T1 4
33 TR 300844 T2 3
34 TR 300844 T3 0
35 TR 300844 T4 1
36 UT 300845 HT 167
37 UT 300845 T1 129
38 UT 300845 T2 123
39 UT 300845 T3 138
40 UT 300845 T4 127
41 UT 300846 HT 158
42 UT 300846 T1 158
43 UT 300846 T2 131
44 UT 300846 T3 125
45 UT 300846 T4 212
46 TR 300848 HT 131
47 TR 300848 T1 22
48 TR 300848 T2 3
49 TR 300848 T3 1
50 TR 300848 T4 3
51 UT 334953 HT 154
52 UT 334953 T1 203
53 UT 334953 T2 249
54 UT 334953 T3 263
55 UT 334953 T4 260
56 UT 334954 HT 229
57 UT 334954 T1 315
58 UT 334954 T2 285
59 UT 334954 T3 261
60 UT 334954 T4 209
61 TR 334955 HT 141
62 TR 334955 T1 11
63 TR 334955 T2 2
64 TR 334955 T3 1
65 TR 334955 T4 1
66 TR 334960 HT 206
67 TR 334960 T1 104
68 TR 334960 T2 86
69 TR 334960 T3 18
70 TR 334960 T4 8
71 UT 336414 HT 225
72 UT 336414 T1 155
73 UT 336414 T2 162
74 UT 336414 T3 184
75 UT 336414 T4 140
76 UT 336415 HT 223
77 UT 336415 T1 212
78 UT 336415 T2 141
79 UT 336415 T3 163
80 UT 336415 T4 151
81 TR 336416 HT 216
82 TR 336416 T1 8
83 TR 336416 T2 66
84 TR 336416 T3 39
85 TR 336416 T4 51
86 TR 336417 HT 197
87 TR 336417 T1 44
88 TR 336417 T3 9
89 TR 336417 T4 4
90 TR 339516 HT 158
91 TR 339516 T1 14
92 TR 339516 T2 2
93 TR 339516 T3 6
94 TR 339516 T4 2
95 TR 339517 HT 180
96 TR 339517 T1 9
97 TR 339517 T2 2
98 TR 339517 T3 2
99 TR 339517 T4 2
我将这些数据绘制为按队列分组的geom_points,其中trial为x轴,number.shocks为y轴
我想用指数模型拟合这些数据,以表明TR组拟合指数衰减,而UT组不拟合。
我已经尝试了许多不同的方法使用geom_smooth和不同的公式或处理我的数据,我得到了许多错误,我看到没有解决与我的不同方法。
最初我认为问题是我的x轴变量是分类的。但它可以作为一个“时间”变量,甚至当我把它作为一个数值,我仍然没有成功
这是我第一次尝试
ggplot(data = combo_behave_room[!(combo_behave_room$trial == "RT"),],
aes(x = trial, y = num.shocks, fill = cohort)) +
geom_point(aes(shape = expt.combo), color = "black", size = 3, position=position_dodge(width = .5)) +
stat_summary(aes(group = cohort, color = cohort), size = 1, fun = mean, geom = "line")
但这是不够的,因为我正在寻找一个回归模型,而不仅仅是一条线绘制的平均值
我希望像这样简单的东西能起作用
ggplot(data = test[!(test$trial == "RT"),],
aes(x = as.numeric(trial), y = num.shocks, fill = cohort)) +
geom_point(aes(shape = expt.combo), color = "black", size = 3, position=position_dodge(width = .5)) +
geom_smooth(method="lm",
formula=log(y) ~x)
但也不想制造情节
最后,我尝试让chatGPT提供帮助,我遇到了这个功能解决方案,但它是不够的,因为它需要我缩放y轴数据第一,这意味着我不绘制我的数据的绝对值
ggplot(data = test[!(test$trial == "RT"),],
aes(x = trial, y = num.shocks_scaled, fill = cohort, group = cohort)) +
geom_point(aes(shape = expt.combo), color = "black", size = 3, position=position_dodge(width = .5)) +
geom_smooth(aes(color = cohort), method="glm", method.args=list(family="quasibinomial"), formula=y ~ x)
在这些图上还有其他图层,用于对点进行着色或标记为简单起见而排除在外的轴
1条答案
按热度按时间ut6juiuv1#
您需要一些技巧:
aes(group=cohort)
(如果**trial
已经成为一个因子,那么as.numeric(trial)
也可以工作-如果trial
是一个字符向量,那么as.numeric(trial)
就不能工作-但是这样做更漂亮一些)y+1
作为响应,而不是y
-否则零会使您陷入混乱(对数高斯GLM比转换数据更健壮,但仍需要一点帮助才能获得可行的初始值)虽然可以从
ggplot
的输出中提取回归信息,但我通常发现在ggplot之外重新运行模型是最简单的。与ggplot
内部所做的最接近的模拟(即为每个队列运行单独的模型,试验作为数字变量)是: