我有一个如下所示的数据框:
>head(df)
alleleA_obs_prob alleleB_obs_prob alleleA_exp_prob alleleB_exp_prob
0.6923077 0.3076923 0.5 0.5
NaN NaN 0.5 0.5
NaN NaN 0.5 0.5
0.6250000 0.3750000 0.5 0.5
0.6250000 0.3750000 0.5 0.5
NaN NaN 0.5 0.5
所以我有两组:等位基因A和等位基因B,我观察过它并预期可能性。
我被告知要对这些数据进行卡方检验,将两组的预期和观察概率进行比较。我搜索了很多教程,但无法理解chisquare测试如何在两个组上运行。要清楚,我不希望别人为我发布代码,我也不要求你做我的作业。我只是不确定,因为
通过在网上浏览现有的chisquare测试示例,我无法理解如何对我的数据执行chisquare测试。
我找不到任何集体在两组之间进行测试的例子。
无法找到他们为数据框中的每一行执行chisquare测试的示例。
我想要一个chisquare值&每行的p值。无论我在哪里,他们都会对整个数据框执行chisquare测试。
我只想要一些帮助,请以您喜欢的方式分享链接或分享见解,如何解决此问题。但请不要以为我要你写我的代码。
谢谢!
答案 0 :(得分:3)
首先,这是一个统计问题,而不是R问题。您应该尝试在stats.stackexchange.com上发布,您可能会得到更好的答案。
其次,有两种类型的卡方检验,一种用于评估样本是否来自给定的测试分布,另一种用于测试独立性。我假设您对第一种类型感兴趣。
如果这是正确的,那么看起来你在问 - 用df的第一行作为例子 - 如果等位基因A和等位基因B以相等的数量存在,你有多大可能获得样本等位基因A的含量为69%,等位基因B的含量为31%?如果可能性(p)非常低,那么我们可以放心地断言1-p等位基因A和等位基因B不等量存在。
[注意:如果这是不你在问什么,那么我误解了你的问题 - 请在评论中告诉我,我会删除答案。]
在你的情况下,最好跳过R中chisq.test(...)
函数的变幻莫测并直接转到Xi-sq的定义:
χ 2 =Σ(O i - E i ) 2 / E i < /子>
其中O i 和E i 分别是i th 观察值和期望值。你设置的方式,每行只有2个观察结果,等位基因A和等位基因B.所以对于第1行,我们会写:
χ 2 =(0.692 - 0.5) 2 / 0.5 +(0.307 - 0.5) 2 / 0.5 = 0.148
由于只有两个观察结果,因此只有1个自由度。只有1 df的卡方检验是非常不可靠的,所以我不推荐这个,但为了这个例子,我们可以计算出chi-sq这个大的概率或者如下R:
pchisq(0.148, df=1, lower.tail=F)
# [1] 0.700454
这意味着,假设等位基因A和等位基因B以相等的量存在,仍有70%的可能性您可以获得等位基因A存在于69%而等位基因B存在于31%的样本。所以我们肯定不能拒绝零假设(等位基因A和B同等存在)。
对所有行运行此测试非常简单:
df <- na.omit(df) # remove rows with missing values
colnames(df) <- c("A.obs","B.obs","A.exp","B.exp") # because I'm lazy
df$chisq <- with(df,(A.obs-A.exp)^2/A.exp + (B.obs-B.exp)^2/B.exp)
df$p.value <- pchisq(df$chisq,df=1, lower.tail=F)
df
# A.obs B.obs A.exp B.exp chisq p.value
# 1 0.6923077 0.3076923 0.5 0.5 0.147929 0.7005224
# 4 0.6250000 0.3750000 0.5 0.5 0.062500 0.8025873
# 5 0.6250000 0.3750000 0.5 0.5 0.062500 0.8025873
您实际上可以使用chisq.test(...)
函数来执行此操作,但在您的情况下,我不确定它是否有所改进:
t(apply(df,1,function(x)
with(chisq.test(x[1:2],p=x[3:4]),c(statistic,p.value=p.value))))
# X-squared p.value
# 1 0.147929 0.7005224
# 4 0.062500 0.8025873
# 5 0.062500 0.8025873
答案 1 :(得分:0)
我认为他们的意思是对两组中的每一组进行卡方检验:
chisq.test(df[is.finite(df[, 'alleleA_obs_prob']), c('alleleA_obs_prob', 'alleleA_exp_prob')])
# X-squared = 0.002, df = 2, p-value = 0.999
chisq.test(df[is.finite(df[, 'alleleB_obs_prob']), c('alleleB_obs_prob', 'alleleB_exp_prob')])
# X-squared = 0.0052, df = 2, p-value = 0.9974