标签: statsmodels

t对Pandas数据帧进行测试,并生成一个新的p值矩阵

我有3个包含7列的数据帧.

df_a
df_b
df_c
df_a.head()

  VSPD1_perc  VSPD2_perc  VSPD3_perc  VSPD4_perc  VSPD5_perc  VSPD6_perc  \
0          NaN         NaN         NaN         NaN         NaN         NaN   
3     0.189588    0.228052    0.268460    0.304063    0.009837           0   
5     0.134684    0.242556    0.449054    0.168816    0.004890           0   
9     0.174806    0.232150    0.381936    0.211108    0.000000           0   
11         NaN         NaN         NaN         NaN         NaN         NaN   

    VSPD7_perc  
0          NaN  
3            0  
5            0  
9            0  
11         NaN 
Run Code Online (Sandbox Code Playgroud)

我的目标是生成一个矩阵或数据帧,其中包含来自t检验的结果p值,并测试数据帧df_b和df_c对df_a,列为列.这是df_b中的测试列1和df_a中针对列1的df_c.我想使用dataframe(df_a)作为标准来进行统计t检验.我在statsmodels(stat.ttest_ind(x1,x2))中找到了统计测试,但是我需要帮助从测试中的p值中创建一个矩阵.有谁知道如何做到这一点...

python statistics pandas statsmodels

7
推荐指数
1
解决办法
4109
查看次数

'statsmodels'或其他Python包是否提供与R''step'功能相同的功能?

是否有一个statsmodels或类似的R等效R step用于使用AIC选择基于公式的模型的功能?

r linear-regression model-fitting pandas statsmodels

7
推荐指数
1
解决办法
2060
查看次数

如何使用Statsmodels库从Pandas数据框创建马赛克图?

使用Python 3.4,Pandas 0.15和Statsmodels 0.6.0,我尝试从Statsmodels文档中描述的数据创建马赛克图.但是,我只是不明白输入必须如何格式化提供给函数.mosaic()

给出一个简单的数据帧:

In:
myDataframe = pd.DataFrame({'size' : ['small', 'large', 'large', 'small', 'large', 'small'], 'length' : ['long', 'short', 'short', 'long', 'long', 'short']})

Out:
  length   size
0   long  small
1  short  large
2  short  large
3   long  small
4   long  large
5  short  small
Run Code Online (Sandbox Code Playgroud)

在尝试创建此数据的马赛克图时:

from statsmodels.graphics.mosaicplot import mosaic
mosaic(data=myDataframe, title='Mosaic Plot')
Run Code Online (Sandbox Code Playgroud)

ValueError: cannot label index with a null key

由于马赛克图是列联表的可视化,我试图创建这样的第一个

In:
myCrosstable = pd.crosstab(myDataframe['size'], myDataframe['length'])

Out:
length  long  short
size …
Run Code Online (Sandbox Code Playgroud)

python pandas statsmodels

7
推荐指数
1
解决办法
9383
查看次数

相当于Python中的cor.test的R'

有没有办法在Python中找到r置信区间?

在R我可以做类似的事情:

cor.test(m, h)

    Pearson's product-moment correlation

data:  m and h
t = 0.8974, df = 4, p-value = 0.4202
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.6022868  0.9164582
sample estimates:
      cor 
0.4093729
Run Code Online (Sandbox Code Playgroud)

在Python中我可以使用以下公式计算r(cor):

r,p = scipy.stats.pearsonr(df.age, df.pets)
Run Code Online (Sandbox Code Playgroud)

但这不会返回r置信区间.

statistics numpy scipy statsmodels

7
推荐指数
1
解决办法
3349
查看次数

如何在Statsmodels中为稳健回归(RLM)获得R平方?

在测量拟合优度时,R平方似乎是“简单”线性模型的一种普遍理解(和接受)的度量。但是statsmodels(与其他统计软件一样)RLM不包含R平方和回归结果。是否有一种方法可以“手动”进行计算,也许类似于在Stata中进行的计算

还是有其他方法可用于/由其产生的结果来计算sm.RLS

这是Statsmodels产生的:

import numpy as np
import statsmodels.api as sm

# Sample Data with outliers
nsample = 50
x = np.linspace(0, 20, nsample)
x = sm.add_constant(x)
sig = 0.3
beta = [5, 0.5]
y_true = np.dot(x, beta)
y = y_true + sig * 1. * np.random.normal(size=nsample)
y[[39,41,43,45,48]] -= 5   # add some outliers (10% of nsample)

# Regression with Robust Linear Model
res = sm.RLM(y, x).fit()
print(res.summary())
Run Code Online (Sandbox Code Playgroud)

哪个输出:

                    Robust linear Model …
Run Code Online (Sandbox Code Playgroud)

python regression linear-regression statsmodels

7
推荐指数
1
解决办法
5538
查看次数

将OLS回归摘要打印到文本文件

pandas.stats.api.ols使用groupby带有以下代码的运行OLS回归:

from pandas.stats.api import ols
df=pd.read_csv(r'F:\file.csv')

result=df.groupby(['FID']).apply(lambda d: ols(y=d.loc[:, 'MEAN'], x=d.loc[:, ['Accum_Prcp', 'Accum_HDD']]))
for i in result:
    x=pd.DataFrame({'FID':i.index, 'delete':i.values})
    frame = pd.concat([x,DataFrame(x['delete'].tolist())], axis=1, join='outer')
    del frame['delete']
    print frame
Run Code Online (Sandbox Code Playgroud)

但是这会返回错误:

AttributeError: 'OLS' object has no attribute 'index'
Run Code Online (Sandbox Code Playgroud)

我的组中有大约2,000个项目,当我打印出每个项目时,它们看起来像这样:

-

------------------------Summary of Regression Analysis-------------------------

Formula: Y ~ <Accum_Prcp> + <Accum_HDD> + <intercept>

Number of Observations:         79
Number of Degrees of Freedom:   3

R-squared:         0.1242
Adj R-squared:     0.1012

Rmse:              0.1929

F-stat (2, 76):     5.3890, p-value:     0.0065

Degrees of Freedom: …
Run Code Online (Sandbox Code Playgroud)

python csv linear-regression pandas statsmodels

7
推荐指数
2
解决办法
8343
查看次数

Python:来自statsmodels的logistic回归模型的l2-Penalty?

有没有办法通过参数或其他东西在逻辑模型中为逻辑回归模型设置l2-Penalty?我刚刚在文档中找到了l1-Penalty,但对于l2-Penalty却没有.

python pandas statsmodels

7
推荐指数
1
解决办法
2729
查看次数

Python - StatsModels,OLS置信区间

在Statsmodels中,我可以使用我的模型

import statsmodels.api as sm

X = np.array([22000, 13400, 47600, 7400, 12000, 32000, 28000, 31000, 69000, 48600])
y = np.array([0.62, 0.24, 0.89, 0.11, 0.18, 0.75, 0.54, 0.61, 0.92, 0.88])
X2 = sm.add_constant(X)
est = sm.OLS(y, X2)
est2 = est.fit()
Run Code Online (Sandbox Code Playgroud)

然后使用打印一个很好的摘要

print(est2.summary())
Run Code Online (Sandbox Code Playgroud)

并使用提取的东西,如p值

est2.pvalues
Run Code Online (Sandbox Code Playgroud)

可在此页面找到http://www.statsmodels.org/dev/generated/statsmodels.regression.linear_model.RegressionResults.html

但是在摘要中存在置信区间,我对如何提取这些置信区间感到迷茫,就像我对pvalues一样.

除了在摘要中看到它们,我怎样才能获得这些置信区间?

python statsmodels

7
推荐指数
1
解决办法
7629
查看次数

为什么我从grangercausalitytests得到"LinAlgError:奇异矩阵"?

我想尝试grangercausalitytests两个时间序列:

import numpy as np
import pandas as pd

from statsmodels.tsa.stattools import grangercausalitytests

n = 1000
ls = np.linspace(0, 2*np.pi, n)

df1 = pd.DataFrame(np.sin(ls))
df2 = pd.DataFrame(2*np.sin(1+ls))

df = pd.concat([df1, df2], axis=1)

df.plot()

grangercausalitytests(df, maxlag=20)
Run Code Online (Sandbox Code Playgroud)

但是,我得到了

Granger Causality
number of lags (no zero) 1
ssr based F test:         F=272078066917221398041264652288.0000, p=0.0000  , df_denom=996, df_num=1
ssr based chi2 test:   chi2=272897579166972095424217743360.0000, p=0.0000  , df=1
likelihood ratio test: chi2=60811.2671, p=0.0000  , df=1
parameter F test:         F=272078066917220553616334520320.0000, p=0.0000  , df_denom=996, df_num=1

Granger Causality …
Run Code Online (Sandbox Code Playgroud)

python statsmodels

7
推荐指数
2
解决办法
3万
查看次数

在Python中轻松访问标准化残差,厨师价值,帽子价值(杠杆)等?

我在拟合线性回归后寻找影响统计数据.在RI中可以像这样获得它们(例如):

hatvalues(fitted_model) #hatvalues (leverage)
cooks.distance(fitted_model) #Cook's D values
rstandard(fitted_model) #standardized residuals
rstudent(fitted_model) #studentized residuals
Run Code Online (Sandbox Code Playgroud)

等等

在拟合这样的模型后,如何在Python中使用statsmodel时获得相同的统计信息:

#import statsmodels
import statsmodels.api as sm

#Fit linear model to any dataset
model = sm.OLS(Y,X)
results = model.fit()

#Creating a dataframe that includes the studentized residuals
sm.regression.linear_model.OLSResults.outlier_test(results)
Run Code Online (Sandbox Code Playgroud)

编辑:见下面的答案......

python linear-regression scikit-learn statsmodels

7
推荐指数
2
解决办法
4494
查看次数