몬테카를로 시뮬레이션에서는 Excel의 RAND() 함수가 얼마나 좋습니까?
나는 몬테카를로 시뮬레이션을 엑셀에서 3개의 변수로 구현하고 있다.Weibull 분포(긴 꼬리 포함)에서 샘플을 추출하기 위해 RAND() 함수를 사용했습니다.샘플에 적용되는 함수는 비선형이지만 부드럽습니다(exp, ln, cos 등).각 표본에 대한 결과는 합격/실패이며, 전체 결과는 불합격 확률입니다.
또한 수치 적분 및 MathCad의 몬테카를로 양쪽에 구현하여 두 번 모두 동일한 결과를 얻었습니다.MathCad는 Mersenne Twister 난수 생성기를 사용합니다.
내 Excel 스프레드시트는 일관되게 다른 결과를 얻고 있다(항상 더 크다).나는 방정식이 같은 것을 확인했다.
Excel은 어떤 난수 생성기를 사용하고 있으며, 그 성능이 얼마나 우수합니까?이것이 제 문제의 원인일 가능성이 있나요?exp, cos 등의 Excel 실장은 괜찮다고 가정하고 있습니다.
마지막으로, 몬테카를로를 구현하여 특정 난수 발생기의 (알려진) 불량 특성을 완화할 수 있는 방법이 있는가?(마르코프 체인, 랜덤 워크 등은 들어봤지만 잘 모릅니다)
대단히 고맙습니다.
이는 구글에서 "Excel의 RAND() 함수가 얼마나 좋은가"에 대한 상위 결과이므로 엑셀의 이후 버전에 대한 답변을 업데이트할 가치가 있습니다.
Guy Melard의 이 문서 "Microsoft Excel 2010 통계 프로시저의 정확성에 대하여"에서 Excel 2010의 RAND() 함수를 테스트한 결과 2007년 또는 2003년에 비해 대폭 개선된 것으로 나타났습니다.Microsoft는 잘못된 Wichmann and Hill 제너레이터(2007/2003)에서 훨씬 더 긴 사이클 길이를 가진 Mersenne Twister 알고리즘으로 전환했습니다.
이 논문의 저자들은 무작위성에 대한 "Small Crush", "Crush" 및 "Big Crush" 테스트를 통해 그것을 실행하였고 거의 모든 테스트를 거의 모두 통과했습니다.
따라서 True 난수와 동일하지는 않지만 Excel 2010의 RAND() 함수와 아마도 새로운 버전은 더 이상 끔찍하다고 볼 수 없습니다.
단, Excel 2010은 VBA 난수 생성기와 데이터 분석 툴킷에 포함된 RNG에 대해 완전히 다른2개의 알고리즘을 사용하고 있습니다.Melard에 따르면, 이 두 가지 모두 여전히 끔찍하며, 사실 VBA는 매번 같은 시드 번호를 사용하기 때문에 같은 번호를 생산한다.
엑셀의 난수에 대한 나의 가장 큰 불만은
- 시드를 설정할 수 없으므로 숫자를 재현할 수 없습니다.
- 난수는 Enter/Delete를 누를 때마다 갱신되며 계산 옵션을 Manual로 설정해도 Excel 파일을 저장할 때 갱신됩니다.
McCullough(2008)가 이 주제에 대해 쓴 저널 페이퍼가 있습니다.Microsoft Excel 2007 통계 절차의 정확성에 대하여(컴퓨터 통계 및 데이터 분석)
원본 기사를 인용하면:
난수 생성기는 항상 부적절합니다.Microsoft는 Excel 2003을 사용하여 Wichmann-Hill 제너레이터를 구현하려고 했지만 올바르게 구현하지 못했습니다.수정 버전은 Excel 2007에 표시되지만 이 수정은 잘못 수행되었습니다.Microsoft는, Wichmann-Hill 제너레이터를 구성하는 12 행의 코드를 올바르게 실장하는 것에 2번이나 실패했습니다.이것은, 학부 컴퓨터 과학 전공자라면 누구나 할 수 있는 일입니다.Excel 난수 생성기는 과학적 목적으로 사용되는 난수 생성기의 기본 요구 사항을 충족하지 않습니다.
- 예를 들어 L'Ecuyer와 Simard의 (2007) CRUSH 테스트(이들은 Marsaglia의 (1996) DIEHARD 테스트를 대체한다)와 같은 표준 무작위성 테스트를 통과하는 것으로 알려져 있지 않다. Altman 등 참조.(2004) 비교를 위해)
- 중간 정도의 차원으로 거의 독립적인 수치를 생성하는 것으로 알려져 있지 않다.
- 기간 길이를 알 수 없습니다.
- 재현할 수 없습니다.
이러한 점에 대한 자세한 내용은 McCullough(2008)의 첨부 문서를 참조하십시오.이 분야에서의 Excel 2007의 퍼포먼스는 불충분합니다.
Paul Wilmott는 그의 Quantitive Finance 책에서 12개의 호출 결과를 RAND()에 단순히 더하고 정규 변수에 대한 근사치를 구하기 위해 6을 뺍니다.Quick n 더티
이 제품에는 시판되는 제품이 있습니다.구글은 내가 보기 싫증나기도 전에 두 개를 찾아낸다.
http://www.mathwave.com/articles/random-numbers-excel-worksheets.html
http://www.ozgrid.com/Services/excel-random-number-generator.htm
RAND()
상당히 랜덤하지만 몬테카를로 시뮬레이션의 경우 (프라이머리리티 테스트를 수행하지 않는 한) 너무 랜덤할 수 있습니다.대부분의 몬테카를로 시뮬레이션은 의사 랜덤 및 결정론적 시퀀스를 필요로 한다.Excel Analysis ToolPak의 일부로서RANDBETWEEN()
의사 변환 시퀀스에 필요한 것은 이것뿐입니다.
언급URL : https://stackoverflow.com/questions/5886237/how-good-is-the-rand-function-in-excel-for-monte-carlo-simulation
'programing' 카테고리의 다른 글
UITable View - 맨 위로 스크롤 (0) | 2023.04.21 |
---|---|
저장 프로시저에서 새 GUID를 생성하는 방법 (0) | 2023.04.21 |
코드 뒤의 이미지 소스 변경(Wpf) (0) | 2023.04.16 |
dlls를 wpf를 사용하여 단일 .exe로 Marge하다 (0) | 2023.04.16 |
readxl 패키지를 사용하여 URL에서 Excel 파일 읽기 (0) | 2023.04.16 |