将比例 z 检验应用于数据框中的每条记录
apply proportion z-test to each record in dataframe
我有下面的代码,我在其中尝试将一个样本比例 ztest 应用于数据中每一行的值。我的数据框 df 中有以下示例数据。我正在尝试将价值中的每个比例与从计数值中获得的比例和从 obs 中的值中获得的试验次数进行比较。我想要每条记录的 p 值。相反,我似乎得到了所有记录的一个 p 值。我在下面有几行所需的输出来说明我的意思。有人可以指出我做错了什么,以及如何解决吗?或者建议一种更巧妙的方法来做到这一点?看起来确实应该有一种方法可以用 pandas 来做到这一点。
# code:
def pvl(x):
return sm.stats.proportions_ztest(x['count'],
x['value'],
x['obs'],
alternative='larger')[1]
df['pval']=df.apply(pvl,
axis=1
)
# sample data:
print(df)
count value obs
211.0 0.013354 15800.0
18.0 0.001139 15800.0
310.0 0.019620 15800.0
114.0 0.007215 15800.0
85.0 0.005380 15800.0
# sample output:
count value obs pval
211.0 0.013354 15800.0 0.5
18.0 0.001139 15800.0 0.5
310.0 0.019620 15800.0 0.5
114.0 0.007215 15800.0 0.5
85.0 0.005380 15800.0 0.5
# desired output:
count value obs pval
211.0 0.013354 15800.0 0.49
18.0 0.001139 15800.0 4.1454796845134295e-41
310.0 0.019620 15800.0 0.9999999999965842
你的 pvl 函数有错误。来自统计模型的 proportion_ztest()
函数按以下顺序接受输入:count、nobs、value。因此,您应该将函数定义为:
def pvl(x):
return sm.stats.proportions_ztest(x['count'], x['obs'],
x['value'], alternative='larger')[1]
但是,根据您的数据,我得到的结果非常接近 0.5,而不是您列为所需输出的结果。我想知道你是怎么得到第二个和第三个结果的,因为它们对我来说似乎是错误的(除非我误解了你的问题)。
我有下面的代码,我在其中尝试将一个样本比例 ztest 应用于数据中每一行的值。我的数据框 df 中有以下示例数据。我正在尝试将价值中的每个比例与从计数值中获得的比例和从 obs 中的值中获得的试验次数进行比较。我想要每条记录的 p 值。相反,我似乎得到了所有记录的一个 p 值。我在下面有几行所需的输出来说明我的意思。有人可以指出我做错了什么,以及如何解决吗?或者建议一种更巧妙的方法来做到这一点?看起来确实应该有一种方法可以用 pandas 来做到这一点。
# code:
def pvl(x):
return sm.stats.proportions_ztest(x['count'],
x['value'],
x['obs'],
alternative='larger')[1]
df['pval']=df.apply(pvl,
axis=1
)
# sample data:
print(df)
count value obs
211.0 0.013354 15800.0
18.0 0.001139 15800.0
310.0 0.019620 15800.0
114.0 0.007215 15800.0
85.0 0.005380 15800.0
# sample output:
count value obs pval
211.0 0.013354 15800.0 0.5
18.0 0.001139 15800.0 0.5
310.0 0.019620 15800.0 0.5
114.0 0.007215 15800.0 0.5
85.0 0.005380 15800.0 0.5
# desired output:
count value obs pval
211.0 0.013354 15800.0 0.49
18.0 0.001139 15800.0 4.1454796845134295e-41
310.0 0.019620 15800.0 0.9999999999965842
你的 pvl 函数有错误。来自统计模型的 proportion_ztest()
函数按以下顺序接受输入:count、nobs、value。因此,您应该将函数定义为:
def pvl(x):
return sm.stats.proportions_ztest(x['count'], x['obs'],
x['value'], alternative='larger')[1]
但是,根据您的数据,我得到的结果非常接近 0.5,而不是您列为所需输出的结果。我想知道你是怎么得到第二个和第三个结果的,因为它们对我来说似乎是错误的(除非我误解了你的问题)。