Encontrar pendiente para una fila de datos, no una columna<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Los datos son por tema en el tiempo, a través de una fila. Vea el siguiente ejemplo:
<SPAN class="number token" style="color: #008080; font-weight: bold;">subject(001) data -0.069965723</SPAN> <SPAN class="number token" style="color: #008080; font-weight: bold;">0.492749371</SPAN> <SPAN class="number token" style="color: #008080; font-weight: bold;">0.955245597</SPAN> <SPAN class="number token" style="color: #008080; font-weight: bold;">1.346963522</SPAN> <SPAN class="number token" style="color: #008080; font-weight: bold;">1.701118239</SPAN> <SPAN class="number token" style="color: #008080; font-weight: bold;">2.523141195</SPAN> columns _1 _2 _3 _4 _5 _8
Tengo miles de tales filas donde se necesita la pendiente.
Todo lo que realmente necesito es la pendiente para cada serie de números en la fila.
Una nueva columna adicional después de cada serie debe contener el valor de pendiente para esa serie en particular.
He preguntado en un foro de SAS si SAS puede manejar esto. ¿Se pregunta si JMP puede? Cualquier ayuda sería muy apreciada.
Nicholas
Re: Encuentra la pendiente para una fila de datos, no una columnaAquí hay otro método. Solo tiene una ventaja, ya que la secuencia de comandos simplemente duplica lo que podría hacer al ejecutar JMP de forma interactiva. He adjuntado una tabla de datos de muestra con la que desarrollé el script.
// Establecer un puntero a los datos de muestra
nombres predeterminados aquí ( 1 ) ;
dt = tabla de datos actual () ;
// Apilar las 6 columnas de datos de cada fila
apilados = dt << Apilar (
columnas : _3 , : _4 , : _5 , : _6 , : _7 , : _8) ,
Columna de la etiqueta de origen ( "Etiqueta" ) ,
Columna de datos apilados ( "Datos" )
) ;
// Crear una nueva columna que represente el factor tiempo
apilados << nueva columna ( "hora" , fórmula( Num ( Sustrato ( : Etiqueta , 2 , 1 )) - 2 )) ;
// Ejecutar el análisis en los datos, por cada fila (estudiante)
biv = apilados << Bivariable (invisible ,
Y : Datos) ,
X( : hora ) ,
Ajustar línea ({Color de línea ({ 213 , 72 , 87 })}) ,
por 1)
) ;
// Crear una tabla de datos de la salida de estimaciones
dtslope = informe (biv [ 1 ]) [ "Estimaciones de parámetros" ] [ 1 ] << hacer tabla de datos combinados;
// Deshacerse de los datos de intercepción
dtslope << seleccione donde ( : término == "Interceptar" ) ;
dtslope << eliminar filas;
// Selecciona las columnas que no quieras y elimínalas.
dtslope : X << conjunto seleccionado ( 1 ) ;
dtslope : y << conjunto seleccionado ( 1 ) ;
dtslope : término << conjunto seleccionado ( 1 ) ;
dtslope : Nombre ( "~ sesgo" ) << conjunto seleccionado ( 1 ) ;
dtslope : error estándar << conjunto seleccionado ( 1 ) ;
dtslope : relación t << conjunto seleccionado ( 1 ) ;
dtslope : Nombre ( "prob> | t |" ) << conjunto seleccionado ( 1 ) ;
dtslope << eliminar columnas;
// Renombrar la columna Estimación a Pendiente
dtslope : Estimar << establecer nombre ( "Cuesta abajo" ) ;
// Añadir la pendiente a la tabla de datos original
dt << Actualizar (
Con (dtslope) ,
Coincidir con columnas ( : _1 = : _1)
) ;
Re: Encuentra la pendiente para una fila de datos, no una columnaAquí hay un ejemplo de una fórmula de columna para calcular la pendiente a través de columnas. No está claro cuáles son los valores de X, pero supongo que están definidos por los nombres de columna como en su ejemplo. Como puedes ver, la matriz X ahora está codificada. La fórmula podría hacerse más general si los valores de X se mantuvieran, por ejemplo, en la primera fila (o en una variable de tabla).
// tabla de ejemplo
dt = Nueva mesa ( "Slope_Across_Columns.jmp" ,
Añadir filas ( 2 ) ,
Nueva Columna ( "Tema" , Personaje , Valores ({ "001" , "002" })) ,
Nueva Columna ( "_1" , Valores ( - 0.069965723 , 2 ])) ,
Nueva Columna ( "_2" , Valores ( 0.492749371 , 4 ])) ,
Nueva Columna ( "_3" , Valores ( 0.955245597 , 6 ])) ,
Nueva Columna ( "_4" , Valores ( 1.346963522 , 8 ])) ,
Nueva Columna ( "_5" , Valores ( 1.701118239 , 10 ])) ,
Nueva Columna ( "_8" , Valores ( 2.523141195 , dieciséis ]))
) ;
// Expresión de fórmula
F = Eval Expr (
Local ({ yo = 1 , norte = Expr ( N Col ( Tabla de datos actual ()) - 1 ) , X = J ( norte , 1 , 1 ) || El 1 , 2 , 3 , 4 , 5 , 8 ] , Y } ,
Y = Matriz ( Repetir ({ yo ++ ; Columna ( yo ) []} , norte )) ;
( Inverso ( X ` * X ) * X ` * Y ) [ 2 ] ;
)
) ;
// Añadir columna de fórmula
dt << Nueva Columna ( "Cuesta abajo" , Numérico , Fórmula ( Nombre Expr ( F ))) ;
Re: Encuentra la pendiente para una fila de datos, no una columnaHola nkormanik ,
la respuesta es sí.
en general, necesitaría transponer los datos y hacer los cálculos. Suponiendo que la tabla de datos es demasiado grande para eso, creo que es más fácil transponer una matriz. por lo tanto, el proceso en general implica extraer los datos en una matriz, transponerlos y calcular las pendientes. Echa un vistazo a esto. Realiza todos los diferentes pasos con fines ilustrativos. No es muy robusto (si le faltan valores) o algo gracioso.
mejor,
ron
// crear una tabla de datos
dt = nueva mesa ( "datos en filas" ,
agregar filas ( 100 ) ,
nueva columna ( "Tema" , fórmula ( fila ())) ,
nueva columna ( "cuesta abajo" ) ,
nueva columna ( "R2" ) ,
agregar columnas múltiples ( "columna" , 20 , numérico )
) ;
// establecer valores para las columnas de datos
para ( yo = 4 , yo <= 23 , yo ++,
: columna ( yo ) << fórmula (( yo / 2 ) + Aleatorio normal ()) << formula eval << eliminar fórmula ;
) ;
// empezar a trabajar
// obtener la tabla como una matriz
matriz de datos = dt << GetAllColumnsAsMatrix ;
// eliminar las columnas no utilizadas para los cálculos de regresión (columnas 1-4)
matriz de datos El 0 , 1 :: 3 ] = [] ;
// transponer la matriz
datos = matriz de datos `;
// hacer una variable x para el tiempo.
X = ( 1 :: ncol ( matriz de datos )) `;
// agregar una columna de 1 para el término de intercepción
X = J ( Nrow ( X ) , 1 ) || X ;
// ahora tenemos todos los datos que necesitamos para los cálculos en forma matricial
para ( Yo remo = 1 , Yo remo <= nows ( dt ) , Yo remo ++, // por cada fila
// extraer datos individuales uno por uno
Y = datos El 0 , Yo remo ] ;
// calcular estimaciones de mínimos cuadrados
β = Inv ( X `* X ) * X `* Y ;
dt : cuesta abajo El Yo remo ] = β El 2 ] ;
// calcular R2
norte = NRows ( Y ) ;
Ybar = Media ( Y ) ;
R2 = ( β `* X `* Y - norte * Ybar ^ 2 ) / ( Y `* Y - norte * Ybar ^ 2 ) ;
dt : R2 El Yo remo ] = R2 ;
) ;