ed_algorithm.py 775 B

12345678910111213141516171819202122232425262728
  1. import numpy as np
  2. import pandas as pd
  3. def calculate_ed(y, genotype):
  4. """
  5. 计算ED值
  6. :param y: 表现型数据,一维numpy数组
  7. :param genotype: SNP基因型数据,Pandas DataFrame,行数为个体数量,列数为SNP位点数
  8. :return: ED值
  9. """
  10. # 检查输入数据是否合法
  11. if not isinstance(y, np.ndarray) or not isinstance(genotype, pd.DataFrame):
  12. raise TypeError("输入数据格式错误")
  13. # 计算每个个体的基因型得分
  14. score = genotype.sum(axis=1)
  15. # 计算每个个体的方差
  16. var_score = np.var(score)
  17. # 计算每个个体与平均表现型的差异的平方和
  18. sum_delta_y_sq = np.sum((y - np.mean(y))**2)
  19. # 计算ED值
  20. ed = sum_delta_y_sq / var_score
  21. return ed