Un script de prueba de normalidad para muchas columnas.Hola,
Me gusta escribir un script que pueda verificar la normalidad de muchas columnas y crear una nueva columna con salida binaria (0,1) para indicar normal y no normal. He visto un complemento para la prueba de normalidad, pero no sé cómo puedo usar eso para lograr lo que quiero.
Cualquier ayuda es muy apreciada.
Gracias.
Re: Un script de prueba de normalidad para muchas columnas.Muchas gracias.
Re: Un script de prueba de normalidad para muchas columnas.La idea de Jim sobre el muestreo aleatorio es buena, pero entonces debe enfrentar el problema del tamaño de la muestra y la potencia. Podría ser más sencillo ajustar su pag -valores utilizando el enfoque de tasa de detección falsa (FDR).
Re: Un script de prueba de normalidad para muchas columnas.Podría hacer una muestra de sus datos a un tamaño de muestra razonable para no ahogar las estadísticas con el tamaño de la muestra.
Re: Un script de prueba de normalidad para muchas columnas.Gracias Dan por los comentarios. Pero que debo hacer entonces. Estoy tratando de entender si las distribuciones son normales o no y tengo muestras grandes.
Aprecio tu ayuda en esto. Gracias
Re: Un script de prueba de normalidad para muchas columnas.Estoy de acuerdo en que los datos parecen normales. Ha encontrado el problema con las pruebas estadísticas con grandes cantidades de datos. Cualquier diferencia, sin importar cuán leve sea, se mostrará como estadísticamente significativa. Tienes más de 100.000 observaciones. La prueba de normalidad (como cualquier prueba estadística) encontrará una diferencia estadísticamente significativa debido al gran tamaño de la muestra. Esa diferencia estadísticamente significativa no es probable que sea una diferencia prácticamente significativa.
Re: Un script de prueba de normalidad para muchas columnas.Hola David,
Gracias. Probé con una mesa diferente y miré una columna. Obtuve el resultado de que la distribución no es normal y me sorprende porque la distribución es normal para mí. El valor de p reportado es 0.01. He adjuntado el histograma. ¿Algún comentario? Gracias.
Re: Un script de prueba de normalidad para muchas columnas.Algunos datos mejores ... por ejemplo
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: Un script de prueba de normalidad para muchas columnas.Ese bucle era solo para ilustrar. Con los datos de Big Class no tiene mucho sentido. El error se debe a que está intentando probar la normalidad para la columna de edad, que tiene un tipo de modelo ordinal, mientras que la prueba de normalidad supone que la columna es continua. Por lo tanto, solo debe proporcionar algunos datos de entrada significativos.
Re: Un script de prueba de normalidad para muchas columnas.Muchas gracias por una rápida respuesta y solución. Usé la plantilla que me enviaste y cuando ejecuté el último bucle:
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"))
);
Recibo un mensaje de error:
Cannot subscript Display Box in access or evaluation of 'Subscript' , rep[/*###*/"Goodness-of-Fit Test"]
Aprecio tu ayuda. Gracias.
);
Re: Un script de prueba de normalidad para muchas columnas.Aquí hay una discusión sobre el flujo de trabajo asociado con la construcción de la función definida por el usuario.
http://www.pega-analytics.co.uk/blog/testing-residuals-for-normality/
Re: Un script de prueba de normalidad para muchas columnas.No está seguro de cómo es su conocimiento de JSL pero puede usar una función definida por el usuario como esta:
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")
);
Desde aquí, puede poner la función dentro de un bucle for que recorre las columnas:
lstNames = dt << Get Column Names(String,Numeric);
For (i=1,i<=NItems(lstNames),i++,
pValue = Test Normal(dt,lstNames[i]);
// etc
);