我创建了以下数据框:
set.seed(42)
df1 = data.frame(pair = rep(c(1:26),2), size = rnorm(52,5.4,1.89))
它表示由“对”列指定的特定大小的随机个体对。
随机分布(5.4,1.89)基于我在研究中采样的组中观察到的数据(N = 26对)。
我现在想问一个非常基本的问题,我无法编写代码:
想象一下平均水平线(5.4),将人口分成两部分:
有多少比例的人与来自同一行的另一个人配对?也就是说,小和大的倾向是否有大而小?
我想比较我观察到的比例与多次“问”上述问题所产生的比例(例如1000次重复)。
在我的研究中,18/26个人与一个类似大小的伴侣在一起,所以我想问“在1000次重复中,相似个体的比例是多少次等于或大于18/26?”这将是我的'p值'。
我不知道如何对此进行编码,但在我看来它是这样的:
对于'size'列中的每个值:当pair值相等时,执行以下操作:
是等于或大于5.4的较大个体?是更小的 个人等于或大于5.4?
如果是,请返回“是”
OR
是等于或小于5.4的较大个体?是更小的 个人等于或小于5.4?
如果是,请返回“是”
如果以上都不成立,则返回0
提供yes和no比例的输出。将其存储在data.frame重复中 此过程1000次,将所有输出添加到提到的数据 帧:
run1 24/26
run2 4/26
...
run999 13/26
我真的希望有人能告诉我这个开头,或相关的代码/参数/结构。
答案 0 :(得分:0)
这就是你想要的吗
#Create empty output, for 10 iterations
same_group_list = replicate(10,0)
diff_group_list = replicate(10,0)
for (j in 1:10){ #For 10 iterations
df1 = data.frame(pair = rep(c(1:26),2), size = rnorm(52,5.4,1.89))
#Sort by 'pair'
df1 = df1[with(df1, order(pair)), ]
#Assign a group based on if 'size' is > or < than mean(size)
for (i in 1:nrow(df1)){
if (df1$size[i] <= mean(df1$size)){ #Use 5.4 explicitly instead of mean(df1$size) if you want
df1$Group[i] = -1
} else {
df1$Group[i] = 1
}
}
df1$Group = as.numeric(df1$Group) #Convert to numeric
output2 = tapply(df1$Group, df1$pair, mean) #Carry out groupwise mean
diff_group_list[j] = sum(output2 == 0) #A mean of 0 means pair grouped with another group
same_group_list[j] = length(output2) - diff_group_list[j] #Everything else is the same group
}
output = data.frame("Same groupout of 26" = same_group_list, "Different Group out of 26" = diff_group_list)
答案 1 :(得分:0)
我创建了一个并排的数据框,然后比较了哪些高于而不是5.4。然后比较对。将两个尺寸均大于5.4的对相加,然后将所有东西除以26。
数据框proportions
显示每次运行的比例。
proportions <- data.frame(run = (1:1000), prop = rep(NA,1000))
for (i in 1:1000) {
df = data.frame(pair = c(1:26),
size1 = rnorm(26,5.4,1.89),
size2 = rnorm(26,5.4,1.89)
)
greaterPairs <- sum(df[,2] > 5.4 & df[,3]>5.4)
proportions[i,2] = greaterPairs/26
}
head(proportions)
我没有将比例保留为字符串格式“18/26”,因为稍后,如果你想要总结它们遵循某些条件的总和,你将不得不在视觉上逐一进行。因此,例如,如果您想知道其中有多少大于或等于18/26:
sum(proportions$prop >= (18/26))