在智利海岸线的螃蟹种群中,我有很长的频率(多达70行是位置)与性别比有关。这个性别比例从北到南从1:1变化,所以我有两列频率,我想确定从哪里开始改变。所以为了做到这一点,我有一个合身的测试。我的想法是在数据框上放置一些预期的概率,因此我可以对存在显着差异的行进行子集化,并在这些人群中进行一些测试。
##Creating some fake data
female<-c(54,34,76,98,65)
male<-c(50,39,85,86,75)
female_exp<-c(0.5,0.5,0.5,0.5,0.5)
male_exp<-c(0.5,0.5,0.5,0.5,0.5)
#The table as Data Frame object
table<-data.frame(female, male, female_exp, male_exp)
我想计算Chi.Square和p.value(df = 1)将这些信息添加到新的columms中,考虑到每一行都有4个元素来执行2x2竞争表。
我试图通过每一行来制作它,但是我对如何将每个值分配到列联表格感到困惑。
答案 0 :(得分:0)
不确定您是否需要以下内容(在Vincent评论后编辑):
##Creating some fake data
female <- c(54,34,76,98,65,20)
male<-c(50,39,85,86,75,80)
female_exp<-c(0.5,0.5,0.5,0.5,0.5,0.5)
male_exp<-c(0.5,0.5,0.5,0.5,0.5,0.5)
#The table as Data Frame object
table<-data.frame(female, male, female_exp, male_exp)
get_chisq <- function(x, prbs) {
chsq <- chisq.test(x=x, p=prbs)
ans <- cbind(statistic=chsq$statistic[[1]],
df=chsq$parameter[[1]],
p.value=chsq$p.value)
ans
}
sol<-data.frame(t(apply(table, 1, function(x) get_chisq(x[1:2], x[3:4]))))
names(sol)<-c("statistic","df","p.value")
sol$hypothesis<-ifelse(sol$p.value<0.5, TRUE, FALSE) # tells you when your hypothesis is true
希望这有帮助。