我有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 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中找到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置信区间.
在测量拟合优度时,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) 我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) 有没有办法通过参数或其他东西在逻辑模型中为逻辑回归模型设置l2-Penalty?我刚刚在文档中找到了l1-Penalty,但对于l2-Penalty却没有.
在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)
但是在摘要中存在置信区间,我对如何提取这些置信区间感到迷茫,就像我对pvalues一样.
除了在摘要中看到它们,我怎样才能获得这些置信区间?
我想尝试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) 我在拟合线性回归后寻找影响统计数据.在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)
编辑:见下面的答案......
statsmodels ×10
python ×8
pandas ×5
statistics ×2
csv ×1
numpy ×1
r ×1
regression ×1
scikit-learn ×1
scipy ×1