2017-02-04 2 views
0
data=c(2,3,2,2,2,1,2,2,2,4,3,2,1,4,3,1,2,1,3,2,2,2,1,2,4,1,1,3,1,2,1,2,2,2,2,2,2,3,2,1) ## population data 
X=matrix(data,4) ## four samples each of size 10 
X 

Je veux estimer des paramètres pour chaque rangée (chaque échantillon) de données à travers cette distribution.pour créer une matrice si des estimations

DGIWD=function(x,t1,a1,b1) t1^(b1/(x+1))^a1- t1^(b1/(x))^a1 
library(MASS) 

jk<-fitdistr(x =X[1,],densfun = DGIWD,start = list(t1=0.6,a1 =3,b1=2.3)) ### estimates parameters for first row X[1,] 
jk 

jk$estimate[1] ## first estimate 
jk$estimate[2] ## 2nd estimate 
jk$estimate[3] ## 3rd estimate 

Je suis intéressé par la gestion d'une boucle pour l'estimation des paramètres et je veux enregistrer les paramètres dans une matrice Il y a échantillon total 4 et paramètres sont trois donc je veux stocker les paramètres dans la matrice de 4X3 comme ci-dessous

estimates<-matrix(NA,nrow=4,ncol=3,byrow=TRUE) 
estimates 

Pourriez-vous nous aider, comment gérer une telle situation.

je moi-même essayé maintenant

h=function(X){ 
DGIWD=function(x,t1,a1,b1) t1^(b1/(x+1))^a1- t1^(b1/(x))^a1 
library(MASS) 
jk<-fitdistr(x =X,densfun = DGIWD,start = list(t1=0.6,a1 =3,b1=2.3)) ### estimates parameters for first row X[1,] 
jk 
} 
X <-list(1:3,4:6,7:9) 
data=c(2,3,2,2,2,1,2,2,2,4,3,2,1,4,3,1,2,1,3,2,2,2,1,2,4,1,1,3,1,2,1,2,2,2,2,2,2,3,2,1) ## population data 
X=matrix(data,4) ## four samples in five rows 

apply(X,1,h) 
a=(do.call(rbind,apply(X,1,h)))[,1] 
b=as.matrix.data.frame(unlist(a)) 

Mais toujours pas en mesure d'obtenir la matrice de 4X3

+0

Comme vous l'avez mentionné '# Cinq échantillons sur cinq lignes', mais quand je lance votre code et que j'imprime 'dim (X)', alors il affiche' 4 rows' et '10 columns'. –

+0

@ Saurabh, vous avez raison, en fait une erreur de frappe. Il s'agit de quatre échantillons de taille 10. –

+0

Veuillez mettre à jour votre question en corrigeant les fautes de frappe. –

Répondre

0

Veuillez passer par le code R suivant:

data=c(2,3,2,2,2,1,2,2,2,4,3,2,1,4,3,1,2,1,3,2,2,2,1,2,4,1,1,3,1,2,1,2,2,2,2,2,2,3,2,1) ## population data 
X=matrix(data,4) ## four samples each of size 10 
DGIWD=function(x,t1,a1,b1) t1^(b1/(x+1))^a1- t1^(b1/(x))^a1 
library(MASS) 
jk=c() #Create empty vector 
for(i in 1:nrow(X)){ 
a=fitdistr(x =X[i,],densfun = DGIWD,start = list(t1=0.6,a1=3,b1=2.3)) 
jk=c(jk,a$estimate) #Append the result to vector jk 
} 
final_matrix=matrix(jk,nrow = nrow(X),byrow = TRUE) # Convert vector to matrix 

La sortie du code ci-dessus est montré ci-dessous:

> X 
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
[1,] 2 2 2 1 2 2 4 1 2  2 
[2,] 3 1 4 4 1 2 1 2 2  3 
[3,] 2 2 3 3 3 1 1 1 2  2 
[4,] 2 2 2 1 2 2 3 2 2  1 
> jk 
    t1  a1  b1  t1  a1  b1  t1  a1  b1 
    0.5353273 5.6575948 2.3487268 0.5601999 2.9350104 2.6272016 0.5550104 4.0996826 2.4168878 
    t1  a1  b1 
0.5582317 7.0411706 2.3134498 
> final_matrix 
     [,1]  [,2]  [,3] 
[1,] 0.5353273 5.657595 2.348727 
[2,] 0.5601999 2.935010 2.627202 
[3,] 0.5550104 4.099683 2.416888 
[4,] 0.5582317 7.041171 2.313450 

Dans la sortie ci-dessus, final_matrix est la sortie souhaitée avec la dimension 4X3. J'espère que ça marche pour toi!

+0

@ Saurabh, Parfait, merci beaucoup –

+0

@ Saurabh, pourriez-vous s'il vous plaît aider avec cela, http://stackoverflow.com/questions/42054371/creating-model-function-in-r –

+0

@ BilalPara- Si vous êtes d'accord avec la réponse fourni par moi alors s'il vous plaît marquer la réponse comme acceptée. –