Foro de discusión y soporte para usuarios de R

Un foro abierto a todos los temas relacionados con R que quiera.
Nota: Una url estable a este foro es https://knuth.uca.es/R-foro.

Predicción de series temporales con acumulados de 15 minutos

de Santiago Crespo -
hola,

¿cómo realizo una serie temporal de datos de un día entero agrupados en 15 minutos? Necesitaría mostrar la gráfica donde en el eje de las x aparezca el 00:00, 00:15, .......23:45.

Gracias y un saludo.

Análisis MDS

de Joan Calventus S. -
Estoy realizando un análisis MDS (escalamiento multidimensional) y no tengo ningún problema cuando entro los datos en forma de matriz de distancias (cuadrada).
Sin embargo, en estos momentos estoy trabajando con una matriz inicial de 62 sujetos y 17 variables.
Los comandos que copio abajo pretenden tres análisis (pasos):
1-trasposición de la matriz inicial
2-cálculo de la matriz de distancias (esta matriz la entrega R como triangular!!)
3-análisis MDS + plot correspondiente

El problema con el que me encuentro es que la matriz de distancias que espera R es cuadrada, sin embargo, compruebo que la matriz (d) que calcula el programa y con la que continua sus análisis es triangular. Y eso es lo que entiendo que provoca el problema.

Copio las instrucciones para que pueda entenderse mejor la consulta puntual.


# Análisis MDS Clásico
# A partir de una matriz inicial de datos (sujetos x objetos)
# Indicar el nombre del conjunto de datos a analizar en matrizdatos=

matrizdatos=

# Transposición y Matriz de distancias (euclídeas)
matriztrans <- t(matrizdatos)
d <- dist(matriztrans)

# Análisis MDS, donde k es el número de dimensiones
fit <- cmdscale(d,eig=TRUE, k=2)
fit

# Plot
x <- fit$points[,1]
y <- fit$points[,2]
plot(x, y, xlab="Coordinate 1", ylab="Coordinate 2",
main="Metric MDS", type="n")
text(x, y, labels = row.names(matrizdatos), cex=.7)

Espero vuestros comentarios,
Saludos,
Joan Calventus

Teoría de Respuesta al Ítem

de Antonio Matas -
Estoy utilizando la librería ltm para realizar análisis de Respuesta al Ítem, siguiendo las notas de Dimitris Rizopoulos.
Tengo dos problemas que no encuentro en los foros:

- Cuando realizo el análisis sobre una matriz en concreto obtengo un error: Error: subíndice fuera de los límites.

- No encuentro la forma de que asigne directamente el valor tipificado del rasgo a cada persona de la muestra. Obtengo las estimaciones con factor.scores pero necesitaría una forma de que asignase los valores directamente a cada persona puesto que obtengo más de 500 patrones distintos.


problemas con los decimales

de Oriol Abello Olive -
Buenas,
tengo un pequeño problema con los decimales. Yo le paso un vector con diferentes numeros a una funcion en C. dentro del programa en C, despues de hacer todos los calculos, los resultados son decimales de mas de 4 cifras, pero al volver a R, los decimales passan a ser 2. Alguien sabe el porque?
Gracias

ERROR con los Rd

de Oriol Abello Olive -
Buenas,
estoy terminando el proyecto y al compilar todo el paquete me sale el siguiente error:
Error : multidendrograms.Rd: non-ASCII input and no declared encoding
Alguien sabe por que sucede esto? es urgente!
gracias!!

Simplificación de tres bucles anidados y gráfica múltiple

de Rubén Gómez -
Hola:

Para agrupar datos a partir de un conjunto de los mismos existentes en un data.frame, estoy utilizando tres bucles for anidados. Como todavía soy novato con R es lo mejor que he sido capaz de hacer, pero me gustaría saber si es posible simplificar esos tres bucles anidados.

La otra duda es que, a partir del nuevo objeto data.frame creado con los bucles for quiero crear un gráfico de cajas (boxplot) para cada una de las filas, pero que quede en una sola «pantalla», por ahora no lo he conseguido.

Entro a exponer ejemplo y código.

Tengo un objeto data.frame de este tipo:

Mes - Dirección - Clase 1 - Clase 2 - Clase 3
1 - Norte - 10 - 30 - 60
1 - Este - 15 - 35 - 50
1 - Sur - 25 - 25 -50
1 - Oeste - 35 - 35 - 30

y así para los doce meses del año. A partir de este objeto, quiero sacar un conjunto de datos de este tipo:

Norte, Clase 1: Mes 1, Mes 2, Mes 3...
Norte, Clase 2: Mes 1, Mes 2, Mes 3...

Lo he logrado con este código:

######## Código ##########

vuelta=1

for (i in 1:length(Aero.direcciones)) {

for (j in 1:length(Aero.clases)) {

var.interna=rep(0,12)

# print(Aero.clases[j])

for (z in 1:12) {

var.interna[z]=Aero.vientos[which(Aero.vientos[,2]==
Aero.direcciones[i])[z],Aero.clases[j]]


} #Fin del bucle de los meses. Cambia de clase.

var.interna[which(is.na(var.interna))]=0

if (sum(var.interna) != 0) {

vuelta=vuelta+1

Aero.conj.datos[vuelta,]=data.frame(
matrix(var.interna,nrow=1,byrow=T),row.names=paste(
Aero.direcciones[i],"-",Aero.clases[j]
)
)
} # Fin del if

# print(paste("Vuelta dentro clases",vuelta))

} # Fin del bucle de las clases. Cambia de dirección.

# print(paste("Dirección",Aero.direcciones[i],"Vuelta",vuelta))
}

rm(i,j,z,var.interna,vuelta)

######### Fin de código ######

Esta línea:

var.interna[which(is.na(var.interna))]=0

es porque en el objeto original los datos que aparecen como NA son, en realidad, 0. Como en algunas ocasiones la dirección-clase es 0 para todos los meses, directamente lo elimino con el if siguiente.

Aclaro que en el data.frame que se crea (Aero.conj.datos) empiezo en [2,] porque previamente ya tengo una línea creada con una situación especial.

¿Habría alguna forma de simplificarlo?

En cuanto a la gráfica, estoy utilizando esto:

sapply(1:73, function(x) boxplot(as.vector(as.matrix(Aero.conj.datos[x,]))))

Pero, aunque crea los gráficos de cajas que persigo, no me lo hace todo en la misma «pantalla» que es lo que quiero.

¿Alguna forma de poder obtener ese gráfico?

Gracias por adelantado.

Un saludo.

R. Gómez

generar 200 repeticiones de 50 numeros aleatorios

de rolando antonio fuica mora -

Hola a todos... necesito generar 200 repeticiones de este código

x<-numeric(50)
semilla<-27218
x[1]=(171*semilla)%%30269
for(i in 2:50){x[i]=(171*x[i-1])%%30269}
NumerosAleatorios<-(x/30269)
NumerosAleatorios

es decir el output debe ser una matriz de 50 filas y 200 columnas. gracias.

Traslación del eje X

de JUAN MIGUEL ANDURI -
Hola amigo estoy haciendo una gráfica de una función y quiero trasladar el eje X y que se grafique en el punto 0, como puedo hacer ello:

xvalor<-seq(-3,3,0.1)
n<- length(xvalor)
yvalor<- rep(0,n)
for(i in 1:n){
x<- xvalor[i]
if((x< -2) & (x>= -3)){
y=0
} else{
if((x< -1) & (x>= -2)){
y=1+(x/2)
}
else{
if((x< 1) & (x>= -1)){
y=1/2
}
else{
if((x<2 ) & (x>= 1)){
y=x/2
}
else{
y=1
}
}
}
}

yvalor[i]=y
}

plot(xvalor,yvalor,type="l",lwd=4,main="Función de distribución")
abline(h=1, lty=2,lwd=2,col="red")