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