许多列的脚本常态测试嗨,
我喜欢编写一个脚本,可以检查许多列的正常性,并创建一个二进制输出(0,1)的新列,以指示正常和非正常。我已经看到了正常测试的插件,但我不知道如何使用它来实现我想要的。
任何帮助是极大的赞赏。
谢谢。
Re:许多列的脚本Normality测试非常感谢你。
Re:许多列的脚本Normality测试Jim对随机抽样的想法很好,但是你必须面对样本量和功率问题。调整你的方式可能更直截了当 p - 使用错误检测率(FDR)方法的值。
Re:许多列的脚本Normality测试您可以从数据中粗略地采样到合理的样本大小,这样您就不会淹没带有样本大小的统计数据。
Re:许多列的脚本Normality测试感谢Dan的评论。但那我该怎么办呢。我试图了解分布是否正常,我确实有大样本。
感谢您对此的帮助。谢谢
Re:许多列的脚本Normality测试我同意数据看起来很正常。您遇到了使用大量数据进行统计测试的问题。任何差异,无论多么微小,都会显示出统计上的显着性。你有超过100,000个观察。正常性测试(如任何统计测试)将因样本量大而发现统计学上的显着差异。这种统计上显着的差异不太可能是实际上显着的差异。
Re:许多列的脚本Normality测试嗨大卫,
谢谢。我试着用另一张桌子看了一栏。我得到的结果是分布不正常,我很惊讶,因为分配对我来说是正常的。报告的p值为0.01。我附上了直方图。任何意见?谢谢。
Re:许多列的脚本Normality测试一些更好的数据...... 例如
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
For (i=5,i<=10,i++,
colName = Column(dt,i) << Get Name;
show(colName);
pValue = Test Normal(dt,colName);
show(pValue);
);
Re:许多列的脚本Normality测试那个循环只是为了说明。 使用Big Class数据它没有多大意义。 这个错误是因为它试图测试age列的正态性 - 它具有序数建模类型 - 而正态性测试假设列是连续的。 所以你只需要提供一些有意义的输入数据。
Re:许多列的脚本Normality测试非常感谢您提供快速反馈和解决方案。我使用了你发送给我的模板,当我运行最后一个循环时:
For (i=1,i<=NItems(lstNames),i++,
pValue = Test Normal(dt,lstNames[i]);
show(pValue);
If (pValue<0.05,
show("failed normality test")
,
show("passed normality test"))
);
我收到一条错误消息:
Cannot subscript Display Box in access or evaluation of 'Subscript' , rep[/*###*/"Goodness-of-Fit Test"]
我感谢您的帮助。谢谢。
);
Re:许多列的脚本Normality测试以下是与构建用户定义函数相关的工作流程的讨论
http://www.pega-analytics.co.uk/blog/testing-residuals-for-normality/
Re:许多列的脚本Normality测试不确定您对JSL的了解是什么,但您可以使用用户定义的函数,例如:
Test Normal = Function({dt,col},{Default Local},
dist = dt << Distribution( Invisible,
Continuous Distribution(
Column( Eval(col) ),
Fit Distribution(
Normal( Goodness of Fit( 1 ) )
)
),
Histograms Only
);
rep = dist << Report;
ob = rep["Goodness-of-Fit Test"];
tb = ob[TableBox(1)];
mat = tb[NumberColBox(2)] << Get;
pValue = mat[1];
rep << Close Window;
Return(pValue);
);
// illustration of using hte function
dt = Open("$SAMPLE_DATA/Big Class.jmp");
pValue = Test Normal(dt,"height");
show(pValue);
If (pValue<0.05,
show("failed normality test")
,
show("passed normality test")
);
从这里,您可以将函数放在迭代列的for循环中:
lstNames = dt << Get Column Names(String,Numeric);
For (i=1,i<=NItems(lstNames),i++,
pValue = Test Normal(dt,lstNames[i]);
// etc
);