필터 지우기
필터 지우기

Z score to p values

조회 수: 121 (최근 30일)
lou
lou 2016년 12월 7일
댓글: Germano Gallicchio 2024년 2월 28일
I have a large matrix 1xN containing z values. I would like to know how to turn these z scores to p values using normcdf function?
How to obtain p values both for one-tailed and two-tailed p values using normcdf?
Many thanks in advance!

채택된 답변

Star Strider
Star Strider 2016년 12월 7일
If I remember correctly, the probability of a one-tailed test is twice the probability of a two-tailed test, so:
p_one = 2*normcdf(z_vector);
p_two = normcdf(z_vector);
  댓글 수: 11
Star Strider
Star Strider 2017년 3월 30일
It depends upon the hypothesis you are testing.
Noah
Noah 2021년 7월 23일
Note that the accepted answer is backwards, unless you mean something strange by your hypothesis. The probability of one-tailed test is HALF the probability of a two-tailed test. The area under a bell curve on one side is half the area on both sides.
p_oneTailed = normcdf(z_vector);
p_twoTailed = 2*normcdf(z_vector);

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Ziwei Liu
Ziwei Liu 2023년 8월 18일
Two-tailed p value should actually be 2 * (1 - normcdf(z)).
normcdf(z) gives the area under curve on the left side of z. This is not p value. One-tailed p value should be the area on the right side, which is (1 - normcdf(z)).Two-tailed p value should be the double of that.
You can use the arrayfun function to compute p value for each entry in your z score matrix. i.e. p = arrayfun(@(x) 2*(1-normcdf(x)), ZScoreMatrix).
  댓글 수: 1
Germano Gallicchio
Germano Gallicchio 2024년 2월 28일
For this to work with negative z scores, you also need to take the absolute value of z:
z = [-2.58 -1.96 -1.65 0 1.65 1.96 2.58]; % vector of z scores
p = 2 * (1 - normcdf(abs(z))); % vector of associated pvalues
disp([z' p'])
-2.5800 0.0099 -1.9600 0.0500 -1.6500 0.0989 0 1.0000 1.6500 0.0989 1.9600 0.0500 2.5800 0.0099

댓글을 달려면 로그인하십시오.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by