stats.f_oneway Scipy Anova returns 具有 4 个值的 2 个数组
stats.f_oneway Scipy Anova returns 2 arrays with 4 values
尝试 运行 对数据进行方差分析的一种方法,大致如下所示:
Year | Diversity |
2010 | 6 |
2010 | 8 |
... | ... |
2011 | 10 |
... | ... |
2019 | 7 |
有1827行,每年范围内各点的多样性值。我正在逐年比较方差。当我这样做时
F, p = stats.f_oneway(df.loc[df["Year"] == 2010],
df.loc[df["Year"] == 2011],
df.loc[df["Year"] == 2012])
(这里我省略了其余的组,因为这非常难看,但我不知道如何通过不同的组进行 Anova 测试)。我得到一个数组,其中 F 和 p 各有 2 个值:
F: type float64, size (2,),
-2.588805281700000000e+11, 4.908743340532151223e+00
p: type float64, size (2,),
nan, 0.00774507
根据我的阅读,我找不到任何人得到 2 个数组,它应该只是一个 F 值和一个 P 值,我做错了什么严重的事情?
(df 中没有零或 NAN)。
当我这样做时:
mod = ols('Diversity ~ (Year)', data = df).fit()
mod.summary()
我得到一个正常的摘要 table,其中 F = 1.462,p = 0.227(与我上面的尝试不同)。
任何关于我的混乱的想法将不胜感激...
你的 DataFrame 有 2 列,即使在你切片之后,因此你 return 2 p-values 和 2 F-values,一个用于比较样本中的每一列。您应该将每个选择更改为仅包含 'Diversity'
列,例如:
df.loc[df['Year'] == 2010, 'Diversity']
如果您只想对样本中所有年份的多样性进行方差分析,您可以使用以下方法紧凑地进行此操作:
stats.f_oneway(*[s for idx, s in df.groupby('Year').Diversity])
MCVE
import pandas as pd
import numpy as np
from scipy import stats
l = [pd.DataFrame(np.random.randint(1, 10, (50, 4))) for i in range(7)]
# |
# 4 cols, should get 4 p-vals/F-vals
stats.f_oneway(*l)
#F_onewayResult(statistic=array([0.70527759, 0.2291319 , 0.03545031, 0.02568242]),
# pvalue=array([0.49563511, 0.79550711, 0.96517894, 0.97464894]))
# col1 col2 col3 col4
尝试 运行 对数据进行方差分析的一种方法,大致如下所示:
Year | Diversity |
2010 | 6 |
2010 | 8 |
... | ... |
2011 | 10 |
... | ... |
2019 | 7 |
有1827行,每年范围内各点的多样性值。我正在逐年比较方差。当我这样做时
F, p = stats.f_oneway(df.loc[df["Year"] == 2010],
df.loc[df["Year"] == 2011],
df.loc[df["Year"] == 2012])
(这里我省略了其余的组,因为这非常难看,但我不知道如何通过不同的组进行 Anova 测试)。我得到一个数组,其中 F 和 p 各有 2 个值:
F: type float64, size (2,),
-2.588805281700000000e+11, 4.908743340532151223e+00
p: type float64, size (2,),
nan, 0.00774507
根据我的阅读,我找不到任何人得到 2 个数组,它应该只是一个 F 值和一个 P 值,我做错了什么严重的事情? (df 中没有零或 NAN)。
当我这样做时:
mod = ols('Diversity ~ (Year)', data = df).fit()
mod.summary()
我得到一个正常的摘要 table,其中 F = 1.462,p = 0.227(与我上面的尝试不同)。
任何关于我的混乱的想法将不胜感激...
你的 DataFrame 有 2 列,即使在你切片之后,因此你 return 2 p-values 和 2 F-values,一个用于比较样本中的每一列。您应该将每个选择更改为仅包含 'Diversity'
列,例如:
df.loc[df['Year'] == 2010, 'Diversity']
如果您只想对样本中所有年份的多样性进行方差分析,您可以使用以下方法紧凑地进行此操作:
stats.f_oneway(*[s for idx, s in df.groupby('Year').Diversity])
MCVE
import pandas as pd
import numpy as np
from scipy import stats
l = [pd.DataFrame(np.random.randint(1, 10, (50, 4))) for i in range(7)]
# |
# 4 cols, should get 4 p-vals/F-vals
stats.f_oneway(*l)
#F_onewayResult(statistic=array([0.70527759, 0.2291319 , 0.03545031, 0.02568242]),
# pvalue=array([0.49563511, 0.79550711, 0.96517894, 0.97464894]))
# col1 col2 col3 col4