Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用STATSMODELS的单因素方差分析_Python_Statsmodels_Anova_Scipy.stats - Fatal编程技术网

Python 使用STATSMODELS的单因素方差分析

Python 使用STATSMODELS的单因素方差分析,python,statsmodels,anova,scipy.stats,Python,Statsmodels,Anova,Scipy.stats,我尝试在三组之间进行单因素方差分析。我已经能够使用SCIPY.STATS获得F分布的F统计量和p值。然而,我的偏好是将方差分析表作为平方和的类R输出。下面给出了我的SCIPY.STATS单向方差分析代码。STATSMODELS ANOVA的所有文档都使用熊猫数据框架。对于如何调整STATSMODELS的现有代码的任何帮助,我将不胜感激 import numpy as np import pandas as pd import scipy.stats as stats from scipy.sta

我尝试在三组之间进行单因素方差分析。我已经能够使用SCIPY.STATS获得F分布的F统计量和p值。然而,我的偏好是将方差分析表作为平方和的类R输出。下面给出了我的SCIPY.STATS单向方差分析代码。STATSMODELS ANOVA的所有文档都使用熊猫数据框架。对于如何调整STATSMODELS的现有代码的任何帮助,我将不胜感激

import numpy as np
import pandas as pd
import scipy.stats as stats
from scipy.stats import f_oneway
data1= pd.read_table('/Users/Hrihaan/Desktop/Sample_A.txt', dtype=float, header=None, sep='\s+').values
data2= pd.read_table('/Users/Hrihaan/Desktop/Sample_B.txt', dtype=float, header=None, sep='\s+').values
data3= pd.read_table('/Users/Hrihaan/Desktop/Sample_C.txt', dtype=float, header=None, sep='\s+').values
Param_1=data1[:,0]
Param_2=data2[:,0]
Param_3=data3[:,0]
f_oneway(Param_1, Param_2, Param_3) 

您可以使用长格式的数据,首先我生成一些类似于您的数据的内容:

import numpy as np
import pandas as pd
import scipy.stats as stats
from scipy.stats import f_oneway

np.random.seed(111)

Param_1=np.random.normal(0,1,50)
Param_2=np.random.normal(0,1,40)
Param_3=np.random.normal(0,1,30)

f_oneway(Param_1, Param_2, Param_3) 

F_onewayResult(statistic=0.43761348608371037, pvalue=0.6466275522246159)
您可以制作如下所示的long data.frame,也可以在读取文件后制作,然后执行pd.concat:

df = pd.DataFrame({'val':np.concatenate([Param_1,Param_2,Param_3]),
             'data':np.repeat(['A','B','C'],[len(Param_1),len(Param_2),len(Param_3)])})

df.head()

    val data
0   -1.133838   A
1   0.384319    A
2   1.496554    A
3   -0.355382   A
4   -0.787534   A
现在我们拟合一个线性模型,并对其进行方差分析:

import statsmodels.api as sm
from statsmodels.formula.api import ols

mod = ols('val ~ data',data=df).fit()

sm.stats.anova_lm(mod, typ=1) 

          df    sum_sq  mean_sq F   PR(>F)
data    2.0 0.794858    0.397429    0.437613    0.646628
Residual    117.0   106.256352  0.908174    NaN NaN

您可以使用长格式的数据,首先我生成一些类似于您的数据的内容:

import numpy as np
import pandas as pd
import scipy.stats as stats
from scipy.stats import f_oneway

np.random.seed(111)

Param_1=np.random.normal(0,1,50)
Param_2=np.random.normal(0,1,40)
Param_3=np.random.normal(0,1,30)

f_oneway(Param_1, Param_2, Param_3) 

F_onewayResult(statistic=0.43761348608371037, pvalue=0.6466275522246159)
您可以制作如下所示的long data.frame,也可以在读取文件后制作,然后执行pd.concat:

df = pd.DataFrame({'val':np.concatenate([Param_1,Param_2,Param_3]),
             'data':np.repeat(['A','B','C'],[len(Param_1),len(Param_2),len(Param_3)])})

df.head()

    val data
0   -1.133838   A
1   0.384319    A
2   1.496554    A
3   -0.355382   A
4   -0.787534   A
现在我们拟合一个线性模型,并对其进行方差分析:

import statsmodels.api as sm
from statsmodels.formula.api import ols

mod = ols('val ~ data',data=df).fit()

sm.stats.anova_lm(mod, typ=1) 

          df    sum_sq  mean_sq F   PR(>F)
data    2.0 0.794858    0.397429    0.437613    0.646628
Residual    117.0   106.256352  0.908174    NaN NaN