我已经计算出一个测试统计量,该统计量被分配为具有1个自由度的卡方,并且想要找出与使用python相对应的P值.
我是一个python和数学/统计新手所以我认为我想要的是来自SciPy的chi2分布的概率denisty函数.但是,当我这样使用时:
from scipy import stats
stats.chi2.pdf(3.84 , 1)
0.029846
Run Code Online (Sandbox Code Playgroud)
然而,一些谷歌搜索和一些知道数学而不是python的同事交谈说它应该是0.05.
有任何想法吗?干杯,戴维
我是机器学习的新手.我正在使用Scikit Learn SVM准备我的数据进行分类.为了选择最好的功能,我使用了以下方法:
SelectKBest(chi2, k=10).fit_transform(A1, A2)
Run Code Online (Sandbox Code Playgroud)
由于我的数据集由负值组成,因此出现以下错误:
ValueError Traceback (most recent call last)
/media/5804B87404B856AA/TFM_UC3M/test2_v.py in <module>()
----> 1
2
3
4
5
/usr/local/lib/python2.6/dist-packages/sklearn/base.pyc in fit_transform(self, X, y, **fit_params)
427 else:
428 # fit method of arity 2 (supervised transformation)
--> 429 return self.fit(X, y, **fit_params).transform(X)
430
431
/usr/local/lib/python2.6/dist-packages/sklearn/feature_selection/univariate_selection.pyc in fit(self, X, y)
300 self._check_params(X, y)
301
--> 302 self.scores_, self.pvalues_ = self.score_func(X, y)
303 self.scores_ = np.asarray(self.scores_)
304 self.pvalues_ = np.asarray(self.pvalues_)
/usr/local/lib/python2.6/dist- packages/sklearn/feature_selection/univariate_selection.pyc in chi2(X, y)
190 X = atleast2d_or_csr(X) …Run Code Online (Sandbox Code Playgroud) python machine-learning chi-squared feature-selection scikit-learn
输入
NN <- c(359,32);JJ <- c(108,13);NNS <- c(103,15);VBN <- c(95,9);RB <- c(63,11);NNP <- c(56,0);VBG <- c(55,10);IN <- c(38,16);VB <- c(20,10);CD <- c(17,6);CC <- c(11,6);DT <- c(11,4);MD <- c(8,5);PRP4 <- c(8,1);PRP <- c(7,4);FW <- c(5,1);VBD <- c(5,3);RBR <- c(4,0);VBP <- c(4,1);VBZ <- c(4,3);WRB <- c(4,2);EX <- c(3,1);NNPS <- c(2,0);WDT <- c(2,3);WP <- c(2,1);PDT <- c(1,1);POS <- c(1,0);RBS <- c(1,0);TO <- c(1,1);UH <- c(0,1)
Finaltable <-
cbind(NN,JJ,NNS,VBN,RB,NNP,VBG,IN,VB,CD,CC,DT,MD,PRP4,PRP,FW,VBD,RBR,VBP,VBZ,WRB,EX,NNPS,WDT,WP,PDT,POS,RBS,TO,UH)
rownames(Finaltable) <- c("tag1","tag2")
Finaltable
chisq.test(Finaltable)
fisher.test(Finaltable)
Run Code Online (Sandbox Code Playgroud)
产量
fisher.test(Finaltable) : FEXACT error 7.
LDSTP is too …Run Code Online (Sandbox Code Playgroud) 我想用Python进行卡方检验.我已经创建了代码来执行此操作,但我不知道我所做的是否正确,因为scipy docs非常稀疏.
背景优先:我有两组用户.我的零假设是,两组中的人是否更有可能使用桌面设备,移动设备或平板电脑没有显着差异.
这些是两组中观察到的频率:
[[u'desktop', 14452], [u'mobile', 4073], [u'tablet', 4287]]
[[u'desktop', 30864], [u'mobile', 11439], [u'tablet', 9887]]
Run Code Online (Sandbox Code Playgroud)
这是我的代码使用scipy.stats.chi2_contingency:
obs = np.array([[14452, 4073, 4287], [30864, 11439, 9887]])
chi2, p, dof, expected = stats.chi2_contingency(obs)
print p
Run Code Online (Sandbox Code Playgroud)
这给了我一个p值2.02258737401e-38,这显然是重要的.
我的问题是:这段代码看起来有效吗?特别是,我不确定我是否应该使用,scipy.stats.chi2_contingency或者scipy.stats.chisquare根据我的数据.
我有一个观测值向量,还有一个用模型计算的值向量:
actual <- c(1411,439,214,100,62,38,29,64)
expected <- c(1425.3,399.5,201.6,116.9,72.2,46.3,30.4,64.8)
Run Code Online (Sandbox Code Playgroud)
现在我正在使用卡方拟合优度测试来看看我的模型表现得如何.我写了以下内容:
chisq.test(expected,actual)
Run Code Online (Sandbox Code Playgroud)
但它不起作用.你能帮帮我吗?
我试图使用卡方(scikit-learn 0.10)选择最佳功能.从总共80个培训文档中我首先提取了227个特征,并从这227个特征中我想选择前10个特征.
my_vectorizer = CountVectorizer(analyzer=MyAnalyzer())
X_train = my_vectorizer.fit_transform(train_data)
X_test = my_vectorizer.transform(test_data)
Y_train = np.array(train_labels)
Y_test = np.array(test_labels)
X_train = np.clip(X_train.toarray(), 0, 1)
X_test = np.clip(X_test.toarray(), 0, 1)
ch2 = SelectKBest(chi2, k=10)
print X_train.shape
X_train = ch2.fit_transform(X_train, Y_train)
print X_train.shape
Run Code Online (Sandbox Code Playgroud)
结果如下.
(80, 227)
(80, 14)
Run Code Online (Sandbox Code Playgroud)
如果我设置k相等,它们是相似的100.
(80, 227)
(80, 227)
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
*编辑:一个完整的输出示例,现在没有剪切,我请求30并获得32:
Train instances: 9 Test instances: 1
Feature extraction...
X_train:
[[0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 …Run Code Online (Sandbox Code Playgroud) 我正在尝试对数据中的所有变量组合进行卡方分析,我的代码是:
Data <- esoph[ , 1:3]
OldStatistic <- NA
for(i in 1:(ncol(Data)-1)){
for(j in (i+1):ncol(Data)){
Statistic <- data.frame("Row"=colnames(Data)[i], "Column"=colnames(Data)[j],
"Chi.Square"=round(chisq.test(Data[ ,i], Data[ ,j])$statistic, 3),
"df"=chisq.test(Data[ ,i], Data[ ,j])$parameter,
"p.value"=round(chisq.test(Data[ ,i], Data[ ,j])$p.value, 3),
row.names=NULL)
temp <- rbind(OldStatistic, Statistic)
OldStatistic <- Statistic
Statistic <- temp
}
}
str(Data)
'data.frame': 88 obs. of 3 variables:
$ agegp: Ord.factor w/ 6 levels "25-34"<"35-44"<..: 1 1 1 1 1 1 1 1 1 1 ...
$ alcgp: Ord.factor w/ 4 levels "0-39g/day"<"40-79"<..: 1 1 …Run Code Online (Sandbox Code Playgroud) 根据这个问题的答案,我试图<random>通过使用来改变分布的参数.param().下面是一个玩具示例,我正在尝试这样做.
对于卡方和正态分布,我有一个生成两个值的函数,第二个参数已被更改.param().我多次运行这两个函数并打印出两者的平均结果.正如预期的那样,正常函数产生0和10的平均结果.出乎意料的是,卡方函数产生4和4的平均结果,而不是我对4和3的预期.为什么我对卡方分布的预期有所偏差?
#include <iostream>
#include <random>
#include <vector>
using namespace std;
vector<double> chisqtest(mt19937_64 &gen)
{
vector<double> res(2);
chi_squared_distribution<double> chisq_dist(4);
res[0] = chisq_dist(gen);
chisq_dist.param(std::chi_squared_distribution<double>::param_type (3));
res[1] = chisq_dist(gen);
return res;
}
vector<double> normtest(mt19937_64 &gen)
{
vector<double> res(2);
normal_distribution<double> norm_dist(0,1);
res[0] = norm_dist(gen);
norm_dist.param(std::normal_distribution<double>::param_type (10,1));
res[1] = norm_dist(gen);
return res;
}
int main() {
unsigned int n = 100000;
mt19937_64 gen(1);
vector<double> totals = {0,0}, res(2);
for(unsigned int i = 0; i < n; …Run Code Online (Sandbox Code Playgroud) 是否有可能获得卡方的值作为 的直接输出scipy.optimize.curve_fit()?
通常,通过对模型和数据之间的差异求平方、不确定性加权和总和,在拟合后很容易计算它。然而,当参数sigma传递一个二维矩阵(数据的协方差矩阵)而不是一个简单的一维数组时,它就不那么直接了。
最佳拟合参数及其协方差矩阵真的是唯一可以从中提取的两个输出curve_fit()吗?
我正在处理数据,试图查看两个变量之间的关联,并在 Python 的 Scipy 包中使用卡方分析。
这是两个变量的交叉表结果:
pd.crosstab(data['loan_default'],data['id_proofs'])
Run Code Online (Sandbox Code Playgroud)
结果:
id_proofs 2 3 4 5
loan_default
0 167035 15232 273 3
1 46354 4202 54 1
Run Code Online (Sandbox Code Playgroud)
如果我对相同的数据应用卡方,我会看到一条错误:ValueError:内部计算的预期频率表在 (0,) 处有一个零元素。
代码:
from scipy.stats import chi2_contingency
stat,p,dof,expec = chi2_contingency(data['loan_default'],data['id_proofs'])
print(stat,p,dof,expec)
Run Code Online (Sandbox Code Playgroud)
错误报告:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-154-63c6f49aec48> in <module>()
1 from scipy.stats import chi2_contingency
----> 2 stat,p,dof,expec = chi2_contingency(data['loan_default'],data['id_proofs'])
3 print(stat,p,dof,expec)
~/anaconda3/lib/python3.6/site-packages/scipy/stats/contingency.py in chi2_contingency(observed, correction, lambda_)
251 zeropos = list(zip(*np.where(expected == 0)))[0]
252 raise ValueError("The internally computed table of expected "
--> …Run Code Online (Sandbox Code Playgroud) chi-squared ×10
python ×6
scipy ×4
statistics ×4
r ×3
scikit-learn ×2
c++ ×1
numpy ×1
random ×1
testing ×1