R репликация в MATLAB - PullRequest
       2

R репликация в MATLAB

0 голосов
/ 20 декабря 2018

Я пытаюсь повторить этот код (из другого вопроса в MATLAB),

https://stats.stackexchange.com/questions/190791/what-is-the-empirical-size-of-a-test

Код, который я использую,

   reps = 1000000;
n = 20;
ACV = erfinv(.975); %AsymptoticCriticalValue
ECV = tinv(.975, n-1); %ExactCriticalValue


for i = 1:reps

    x = normrnd(0, 1, [n,1]);
    tstat = sqrt(n)*mean(x)/std(x);
    DACV(i) = abs(tstat)>ACV;
    DECV(i) = abs(tstat)>ECV;

end

    y = mean(DACV);
    z = mean(DECV);

Однако я что-то не так понимаю, так как цифры не совпадают.

Исходный код в R:

reps <- 100000
DecisionAsymptoticCriticalValue <- DecisionExactCriticalValue <- matrix(NA,reps)
n <- 20
AsymptoticCriticalValue <- qnorm(.975)
ExactCriticalValue <- qt(.975,n-1)

for (i in 1:reps){
  x <- rnorm(n)
  tstat <- sqrt(n)*mean(x)/sd(x)
  DecisionAsymptoticCriticalValue[i] <- (abs(tstat) > AsymptoticCriticalValue)
      DecisionExactCriticalValue[i] <- (abs(tstat) > ExactCriticalValue)
    }
> (mean(DecisionAsymptoticCriticalValue))
[1] 0.06459

> (mean(DecisionExactCriticalValue))
[1] 0.05012
> 

1 Ответ

0 голосов
/ 20 декабря 2018

Я предполагаю, что проблема, которую вы имеете, связана с ACV, в Matlab вы использовали код erfinv(.975), но я предполагаю, что вы хотите, чтобы y и z были близки, как в первоначальном вопросеЕсли вы измените ACV на 1.96, то получите те же результаты, что и в приведенном выше вопросе.

Функция q-нормы в R:

# What is the Z-score of the 96th quantile of the normal distribution?
qnorm(.96)

кредитует: http://seankross.com/notes/dpqr/

Таким образом, когда вы меняете его на 1,96, критическое значение от нормального, Iдумаю, что это должно работать идеально.

Лучший ответ скажет вам, как получить 1,96, а не просто вставить его (но я не уверен, как это сделать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...