首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在蟒蛇实验小组中使用OLSResults.f_test

如何在蟒蛇实验小组中使用OLSResults.f_test
EN

Stack Overflow用户
提问于 2020-05-22 00:03:17
回答 1查看 516关注 0票数 1

我试着做一个系数相等的F检验,我在我的数据中有三个实验组。

我已经进行了一个回归来评估随机对照试验的结果,包括G1,G2,G3和对照组。

现在我需要确定实验组(G1,G2,G3)是相等的。

我知道我可以使用Statsmodel的OLSResults.f_test来完成这个任务。但我不清楚如何配置它。这个网站给出了一些例子,但我不知道如何翻译它:https://www.statsmodels.org/stable/generated/statsmodels.regression.linear_model.OLSResults.f_test.html

给出的例子是:

代码语言:javascript
复制
from statsmodels.datasets import longley
from statsmodels.formula.api import ols
dta = longley.load_pandas().data
formula = 'TOTEMP ~ GNPDEFL + GNP + UNEMP + ARMED + POP + YEAR'
results = ols(formula, dta).fit()
hypotheses = '(GNPDEFL = GNP), (UNEMP = 2), (YEAR/1829 = 1)'
f_test = results.f_test(hypotheses)
print(f_test)

从本质上讲,我是如何写出以下假设的,这样我才能检查我的三个实验小组是否不同?

代码语言:javascript
复制
hypotheses = '(G1=G2), (G1=G3), (G2=G3)'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-22 23:19:58

我们可以用虹膜的例子:

代码语言:javascript
复制
from statsmodels.formula.api import ols
import pandas as pd

data = load_iris()
df = pd.read_csv("http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data",
                 header=None,names=["s_wid","s_len","p_wid","p_len","species"])

df.species.unique()

array(['Iris-setosa', 'Iris-versicolor', 'Iris-virginica'], dtype=object)

在物种中有三种类型,我们可以像你一样拟合一个模型:

代码语言:javascript
复制
formula = 's_len ~ species'
results = ols(formula, df).fit()

如果我们看看结果:

代码语言:javascript
复制
results.summary()

Dep. Variable:  s_len   R-squared:  0.392
Model:  OLS Adj. R-squared: 0.384
Method: Least Squares   F-statistic:    47.36
Date:   Sat, 23 May 2020    Prob (F-statistic): 1.33e-16
Time:   01:07:39    Log-Likelihood: -49.688
No. Observations:   150 AIC:    105.4
Df Residuals:   147 BIC:    114.4
Df Model:   2       
Covariance Type:    nonrobust

    coef    std err t   P>|t|   [0.025  0.975]
Intercept   3.4180  0.048   70.998  0.000   3.323   3.513
species[T.Iris-versicolor]  -0.6480 0.068   -9.518  0.000   -0.783  -0.513
species[T.Iris-virginica]   -0.4440 0.068   -6.521  0.000   -0.579  -0.309

如果您的模型只包含上述组,那么F-统计量(47.36)和p.value (1.33e-16)就是您所需要的。这个F测试测试这个模型是针对一个只拦截的模型。

更详细的解释是:该模型以Iris-setosa为参照系,计算了其它两个物种对萼片长度s_len的影响作为Iris-setosa的相关系数。如果我们看一下平均值,就会清楚地看到:

代码语言:javascript
复制
df.groupby('species')['s_len'].mean()

Iris-setosa        3.418
Iris-versicolor    2.770
Iris-virginica     2.974

在这种情况下,假设是Iris-versicolor =0和Iris-virginica=0,所以这些组都是相等的:

代码语言:javascript
复制
hypotheses = '(species[T.Iris-versicolor] = 0), (species[T.Iris-virginica] = 0)'
results.f_test(hypotheses)

<class 'statsmodels.stats.contrast.ContrastResults'>
<F test: F=array([[47.3644614]]), p=1.327916518456957e-16, df_denom=147, df_num=2>

现在,您可以看到,这与总结中提供的F统计数据完全相同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61945733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档