728x90
반응형
H0 : beta1과 beta2는 같다.
H1 : beta1과 beta2는 다르다.
def compare_slope_test(x1,x2,y):
from statsmodels.formula.api import ols
import numpy as np
from scipy.stats import t
'''
x1,x2,y : np.array or list conatining numeric values. They should have same size.
'''
df=pd.DataFrame({'x1':x1,'x2':x2,'y':y})
x1_model=ols('y~x1',data=df).fit()
x2_model=ols('y~x2',data=df).fit()
slope_difference=x1_model.params['x1']-x2_model.params['x2']
se_difference=np.sqrt(x1_model.bse['x1']**2+x2_model.bse['x2']**2)
t_statistics=slope_difference/se_difference
degree_of_freedom=len(df)-4 # degree of freedom를 -4 하는 이유는 y가 2번 x1, x2가 각각 1번 씩 들어가기 때문임.
p_value=2*(1-t.cdf(np.abs(t_statistics),degree_of_freedom))
return p_value
two-sided로 테스트하기 때문에 p_value에 값을 2를 곱하는 것임. one-sided로 할 것이라면 제거하면 됨.
테스트
import numpy as np
import pandas as pd
import seaborn as sns
x1=np.random.randn(50)
x1=x1[np.argsort(x1)]
x2=x1+np.random.rand(50)/10+1
y=np.random.randn(50)
y=y[np.argsort(y)]
compare_slope_test(x1,x2,y)
# 0.7521
# p-value값은 달라질 수 있음.
df=pd.DataFrame({'x1':x1,'x2':x2,'y':y})
df=df.melt(id_vars='y')
sns.lmplot(data=df,x='value',y='y',hue='variable')
# 기울기를 직각으로 만드는 경우
import numpy as np
import pandas as pd
import seaborn as sns
x1=np.random.randn(50)
x1=x1[np.argsort(x1)]
x2=x1[np.argsort(-x1)]+np.random.rand(50)/10+1
y=np.random.randn(50)
y=y[np.argsort(y)]
compare_slope_test(x1,x2,y)
df=pd.DataFrame({'x1':x1,'x2':x2,'y':y})
df=df.melt(id_vars='y')
sns.lmplot(data=df,x='value',y='y',hue='variable')
# 0.0
728x90
반응형
'파이썬3' 카테고리의 다른 글
Cluster index permutation test (0) | 2023.10.04 |
---|---|
symbol to phred score 변환 파이썬 기능 (0) | 2023.08.31 |
vcf를 pandas dataframe으로 변경하는 코드 (0) | 2023.03.28 |
protein sequence one-hot encoding (0) | 2023.02.02 |
tensorflow==1.13.1설치 도커 (0) | 2022.04.27 |