April 20, 2022
Q-Q Plot을 그리는 방법은 엑셀에서 Q-Q 플롯 그리기를 참고하였습니다.
위 내용을 요약하면 아래 순서와 같습니다.
Z-Score 계산
MATH.NET NuGet의 InverseCumulativeDistribution()사용
// 1. 데이터 읽어오기
var projectDir = Directory.GetParent(Environment.CurrentDirectory).Parent.FullName;
string filePath = Path.Combine(projectDir, "QQTest.csv");
StreamReader sr = new StreamReader(filePath, Encoding.GetEncoding("euc-kr"));
List<double> numbers = new List<double>();
while (!sr.EndOfStream)
{
string s = sr.ReadLine();
string[] temp = s.Split(',');
numbers.Add(double.Parse(temp[0]));
}
// 2. 오름차순 정렬
numbers.Sort();
// 3. 순위(Rank) 계산
var numberCount = numbers.Count;
List<double> ranks = new List<double>();
for (int i = 1; i < numberCount + 1; i++)
{
ranks.Add(i);
}
// 4. 백분위 계산
List<double> percentiles = new List<double>();
foreach (var rank in ranks)
{
var percentile = (rank - 0.5) / numberCount;
percentiles.Add(percentile);
}
// 5. Z-Score 계산
// 표준 정규 누적 분포 역함수 : NORM.S.INV
// MATH.NET NuGet 사용
List<double> normStandardInverses = new List<double>();
foreach (var percentile in percentiles)
{
var normal = new Normal();
double value = normal.InverseCumulativeDistribution(percentile);
normStandardInverses.Add(value);
}
// 6. Q-Q Plot X, Y값 확인
var xData = normStandardInverses;
var yData = numbers;
만들어진 xData
및 yData
로 차트 라이브러리를 이용해 Q-Q Plot을 그리면 됩니다.