我正在尝试根据DataCamp课程提供的示例分析一些数据。但是,我认为他们在Datacamp上跳过了一些步骤,并且遇到了一些问题。 特别是,在他们提供的示例中,他们有一个名为MedGPA的数据集,如下所示:
Accept Acceptance Sex BCPM GPA VR PS WS BS MCAT Apps
1 D 0 F 3.59 3.62 11 9 9 9 38 5
2 A 1 M 3.75 3.84 12 13 8 12 45 3
3 A 1 F 3.24 3.23 9 10 5 9 33 19
4 A 1 F 3.74 3.69 12 11 7 10 40 5
5 A 1 F 3.53 3.38 9 11 4 11 35 11
6 A 1 M 3.59 3.72 10 9 7 10 36 5
7 A 1 M 3.85 3.89 11 12 6 11 40 5
8 D 0 M 3.26 3.34 11 11 8 9 39 7
9 A 1 F 3.74 3.71 8 10 6 11 35 5
10 A 1 F 3.86 3.89 9 9 6 10 34 11
11 A 1 F 4.00 3.97 11 9 8 11 39 6
12 A 1 F 3.35 3.49 11 8 4 8 31 9
13 A 1 M 3.77 3.77 8 10 7 10 35 5
14 D 0 M 3.60 3.61 9 9 4 10 32 8
15 D 0 M 3.29 3.30 11 8 6 7 32 15
16 A 1 F 3.26 3.54 12 8 8 10 38 6
17 D 0 M 3.75 3.65 8 8 8 11 35 6
18 A 1 M 3.51 3.54 9 10 9 11 39 1
19 D 0 M 3.27 3.25 8 9 5 10 32 5
20 A 1 M 3.95 3.89 13 14 8 13 48 5
然后,他们说您应该对数据进行分箱,并对分箱后的数据集进行一些分析。
它们提供合并的数据集,它看起来像这样:
> MedGPA_binned
# A tibble: 6 x 3
bin mean_GPA acceptance_rate
<fct> <dbl> <dbl>
1 [2.72,3.3] 3.11 0.2
2 (3.3,3.44] 3.39 0.2
3 (3.44,3.58] 3.54 0.75
4 (3.58,3.7] 3.65 0.333
5 (3.7,3.87] 3.79 0.889
6 (3.87,3.97] 3.91 1
GPA预测学生是否会被录取(接受率)的地方。
如何从第一个数据集到第二个数据集?
在我的数据集中,我对问题(连续变量)有一系列答案,我要预测的变量是CorrectGuess。该变量只有两个可能的结果:0 =正确的猜测,1 =错误的猜测。
我尝试了我的数据集:
data$bins2 = cut(data$Q15_1, breaks = 4, labels = c("Level1", "Level2", "Level3","Level4"))
这会向我的数据集添加一个名为bins2的列,看起来像
level2
leve1
leve3
level1
以此类推...
我还尝试了另一种方式:
# Creating bins
# set up boundaries for intervals/bins
breaks <- c(0,20,40,60,80,100)
# specify interval/bin labels
labels <- c("<20", "20-40", "40-60", "60-80", "80-100")
# bucketing data points into bins
bins <- cut(data$Q15_1, breaks, include.lowest = T, right=FALSE, labels=labels)
# inspect bins
summary(bins)
plot(bins, main="Frequency", ylab="Ppt Answer Rating",col="bisque")
这会创建一个名为bins的变量,但看起来仍然不符合我的需求。
我该如何创建带有二进制数据的数据集以及每个BIN的正确猜测的概率?
答案 0 :(得分:2)
对我而言,在执行回归之前对数据进行装箱并没有多大意义,您只是丢掉了信息,可能会使分析失真。
但是无论如何,我相信您正在使用aggregate()
tt <- read.table(text="
Accept Acceptance Sex BCPM GPA VR PS WS BS MCAT Apps
1 D 0 F 3.59 3.62 11 9 9 9 38 5
2 A 1 M 3.75 3.84 12 13 8 12 45 3
3 A 1 F 3.24 3.23 9 10 5 9 33 19
4 A 1 F 3.74 3.69 12 11 7 10 40 5
5 A 1 F 3.53 3.38 9 11 4 11 35 11
6 A 1 M 3.59 3.72 10 9 7 10 36 5
7 A 1 M 3.85 3.89 11 12 6 11 40 5
8 D 0 M 3.26 3.34 11 11 8 9 39 7
9 A 1 F 3.74 3.71 8 10 6 11 35 5
10 A 1 F 3.86 3.89 9 9 6 10 34 11
11 A 1 F 4.00 3.97 11 9 8 11 39 6
12 A 1 F 3.35 3.49 11 8 4 8 31 9
13 A 1 M 3.77 3.77 8 10 7 10 35 5
14 D 0 M 3.60 3.61 9 9 4 10 32 8
15 D 0 M 3.29 3.30 11 8 6 7 32 15
16 A 1 F 3.26 3.54 12 8 8 10 38 6
17 D 0 M 3.75 3.65 8 8 8 11 35 6
18 A 1 M 3.51 3.54 9 10 9 11 39 1
19 D 0 M 3.27 3.25 8 9 5 10 32 5
20 A 1 M 3.95 3.89 13 14 8 13 48 5", header=TRUE)
tt$BCPMd = cut(tt$BCPM, breaks=4, labels=c("L1", "L2", "L3","L4"))
aggregate(cbind(GPA, Acceptance) ~ BCPMd, data=tt, mean)
# BCPMd GPA Acceptance
# 1 L1 3.358333 0.5
# 2 L2 3.574000 0.6
# 3 L3 3.732000 0.8
# 4 L4 3.910000 1.0
答案 1 :(得分:0)
上面的答案很好。您还可以使用dplyr
语法通过group_by
和summarise
函数来完成所需的操作。
library(dplyr)
df %>% group_by(bin = cut(GPA, breaks = c(2.72, 3.3, 3.44, 3.58, 3.7, 3.87, 3.97))) %>%
summarise(mean = mean(GPA), acceptance_rate = sum(Acceptance) / length(Acceptance))
使用df是您的数据集
bin mean acceptance_rate
<fct> <dbl> <dbl>
1 (2.72,3.3] 3.26 0.333
2 (3.3,3.44] 3.36 0.5
3 (3.44,3.58] 3.52 1
4 (3.58,3.7] 3.64 0.25
5 (3.7,3.87] 3.76 1
6 (3.87,3.97] 3.91 1