相关性计算与显著性检验

相关性:

1. 连续变量与连续变量的相关性

皮尔逊相关系数(前提假设:两组数同方差):不能提供两组数据方向性的信息,

import pandas as pd 
pd.DataFrame.corr()
2. 二分类变量与连续数值变量的相关性

^bde3c6

点二列相关系数(Point-Biserial Correlation Coefficient)是用于评估一个二分类变量和一个数值变量之间的相关性的统计量。它衡量了数值变量和二分类变量之间的线性关系强度和方向。以下是计算点二列相关系数的步骤:

  1. 将二分类变量转换为二进制指示变量:将原始的二分类变量转换为两个二进制指示变量,其中一个指示变量表示分类为1的情况,另一个指示变量表示分类为0的情况。
  2. 计算均值:计算数值变量在分类为1和分类为0的情况下的均值,分别记为M1和M0。
  3. 计算二分类变量的比例:计算分类为1的观测值在总观测值中的比例,记为p1。 ^91cc9e
  4. 计算点二列相关系数:使用以下公式计算点二列相关系数(rpb):

rpb = (M1 - M0) / sqrt(p1 * (1 - p1))

其中,M1和M0是数值变量在分类为1和分类为0情况下的均值,p1是分类为1的观测值比例。

点二列相关系数的取值范围在-1到1之间。当相关系数接近1时,表示数值变量与分类为1的情况呈正相关;当相关系数接近-1时,表示数值变量与分类为1的情况呈负相关;当相关系数接近0时,表示数值变量与分类变量之间没有线性相关性。

x = [0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0]
y = [12, 14, 17, 17, 11, 22, 23, 11, 19, 8, 12]
import scipy.stats as stats

#calculate point-biserial correlation
stats.pointbiserialr(x, y)
#其实就是皮尔逊相关系数
PointbiserialrResult(correlation=0.21816, pvalue=0.51928)
3. 分类变量与分类变量之间的相关性

卡方检验

4. 互相关(标准化互相关Normalized Cross-Correlation)

用来评估两组时间序列相关性:值越高,相关度越高(-1~1) ^4771e1
KaTeX parse error: Expected 'EOF', got '_' at position 12: \text{norm_̲corr}(x,y) = \f…

import ccf from statsmodels.tsa.stattools
5.自相关(Auto-Correlation)

在不同时间段与自身比较,用来检测时间序列的周期性或者重复模式

6.标准化的自相关与时移(Normalized Auto-Correlation with Time Shift)
from statmodels.tsa.stattools import acf
acf(time_serise,nlags,fft)#nlags 是时间偏移点数。

from statsmodels.stats.diagnostic import acorr_ljungbox


显著性检验

两组数据平均值是否有显著性差异
t-检验:

先验证是否符合正太分布

from scipy.stats import shapiro
def test_normality(data):
    # Shapiro-Wilk测试
    stat, p = shapiro(data)
    
    # 结果解读
    if p > 0.05:
        return "数据呈正态分布。"
    else:
        return "数据不呈正态分布。"

# 检验数据正态性
result = test_normality(brand_page_visits)
result
方差分析

需要先检验方差齐性检验,再执行方差分析

from scipy import stats
group1 = list(random.randint(10))
group2 = list(random.randint(10))
group3 = list(random.randint(10))

#方差齐性检验
statistic, p_value = stats.levene(group1,group2,group3)
statistic, p_value  #原假设是齐性  若p_value大于0.05,则方差齐性

#单因素方差分析
f_statistic, p_value = stats.f_oneway(group1,group2,group3)
f_statistic, p_value  #原假设是均值相对
卡方检验(非参数检验)

卡方统计量 = ∑ ( o b s e r v e d − e x p e c t e d ) 2 e x p e c t e d \text{卡方统计量} = \sum{\frac{(observed-expected)^2}{expected}} 卡方统计量=expected(observedexpected)2

根据卡方统计量和自由度,结合卡方表可以获取p_value

原假设时两样本没有显著差异:p_value如果大于阈值(0.05)则支持原假设

统计量计算过程:代码实现:卡方拟合优度检验,它用于评估观察数据与理论分布或假设模型的拟合程度。

import pandas as pd 
import numpy as np 
from scipy import stats
#创建上述表
observed_pd = pd.DataFrame(['1点']*23+['2点']*20+['3点']*18+['4点']*19+['5点']*24+['6点']*16)
expected_pd = pd.DataFrame(['1点']*20+['2点']*20+['3点']*20+['4点']*20+['5点']*20+['6点']*20)
observed_table = pd.crosstab(index=observed_pd[0],columns='count')
expected_table = pd.crosstab(index=expected_pd[0],columns='count')
print(observed_table)
print('——————')
print(expected_table)
#通过公式算出卡方值
observed = observed_table 
expected = expected_table 
chi_squared_stat = ((observed-expected)**2/expected).sum()
print('chi_squared_stat')
print(chi_squared_stat)

实际应用库

#方法一
crit = stats.chi2.ppf(q=0.95,df=5)  #累积分布函数的反函数,95置信水平 df = 自由度  返回卡方值
print(crit) #临界值,拒绝域的边界 当卡方值大于临界值,则原假设不成立,备择假设成立
P_value = 1-stats.chi2.cdf(x=chi_squared_stat,df=5)  #吃进卡方统计量,和自由度,返回概率值
print('P_value')
print(P_value) 
# 方法二 
stats.chisquare(f_obs=observed, #Array of obversed counts
                f_exp=expected) #Array of expected counts 
交叉表卡方:多组样本的是否有显著性差异

在日常的数据分析工作中,卡方检验主要用于留存率,渗透率等漏斗指标,下面我们就以留存率为例,假设平台从微博、微信、知乎渠道引流,现在我们要确定留存率是否与渠道有关。(示例数据皆为虚构)

第一步我们先设立原假设:留存率与渠道无关;第二步设置显著性水平α=0.05,在确立使用卡方检验之后接下来用python实现

df = pd.DataFrame(columns = ['register','stay'],index = ['weibo','zhihu','weixin'],
                 data=[[11570,3173],[15113,3901],[18244,4899]])
df['lost'] = df['register']- df['stay'] 
df 
observed = df[['stay','lost']]
stats.chi2_contingency(observed=observed)
#一般做法如下
#crosstab=pd.crosstab(df['HeartDiseaseorAttack'],df['Sex'])
#stats.chi2_contingency(crosstab)
#还可以探究多个特征的卡方检验:下面每个数字是一个特征组合出现次数,需要上面的pd.crosstab()计算
obs = np.array(
    [[[[12, 17],
       [11, 16]],
      [[11, 12],
       [15, 16]]],
     [[[23, 15],
       [30, 22]],
      [[14, 17],
       [15, 16]]]])
res = chi2_contingency(obs)
res.statistic
8.7584514426741897
res.pvalue
0.64417725029295503
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值