2015-10-26 1 views
0

Il s'agit d'une question très spécifique; donc je vous dis juste ce que j'ai affaire:Ajout de bruit aux éléments de la matrice avec une valeur spécifique

J'ai une matrice géante avec 2 colonnes - la colonne 1 se réfère à l'heure, la colonne 2 à une concentration de la molécule. Le signal de la molécule est artificiel, c'est pourquoi la ligne de base est plate (image). En réalité, il devrait être légèrement bruyant enter image description here

Par conséquent, je voudrais ajouter du bruit sur une distribution normale; J'ai fait quantifier les éléments qui ont cette valeur de référence:

numb=length(App[,2][App[,2]==min(App[,2])]) 
noise=rnorm(numb) 

Je me bats maintenant avec l'ajout de ce bruit aléatoire aux éléments

App[,2]==min(App[,2]) 

J'ai essayé une si boucle:

if(App[,2]==min(App[,2])) { 

    App[,2]=App[,2]=+noise 
    } 

mais pour une raison quelconque, cela ne fonctionne pas. (Erreur "Dans si (App [, 1] == min (App [, 1])) {: la condition a la longueur> 1 et seul le premier élément sera utilisé)

Avez-vous un pourboire de ! me

Meilleurs voeux et merci beaucoup

+0

Peut-être que App '[App [2] == min (App [2])], 2] = App [App [, 2] == min (App [, 2])], 2] + noise' –

+0

Si nécessaire, voici une explication de l'erreur: 'App [, 1]' est un vecteur de longueur '> 1' (disons 'n'),' min (App [, 1]) 'est un vecteur de longueur' 1'. En comparant les deux vecteurs avec '==', ce qui est retourné (appelez-le 'ret') est un vecteur de longueur' n'. Comme 'if' ne sait pas quoi faire avec ce vecteur, il prend le premier élément donc si' App [1, 1] == min (App [, 1] 'est' true', la condition 'if' est Vous pouvez, cependant, utiliser 'ret' pour indexer' App' et continuer –

Répondre

1

Peut-être que ça pourrait aider:

baseline.index = which(App[,2] == min(App[,2])) 
noise = rnorm(length ( baseline.index)) 
App[baseline.index,2] = App[baseline.index,2] + noise 
+0

merci beaucoup - ça marche bien :) - malheureusement, il n'a pas vraiment l'air réaliste, mais je suis un pas plus près – Arne

+0

@Arne Il s'agit de choisir les points que vous voulez changer. Dans ce cas, vous avez stocké les indices de ceux dans le 'baseline.index'. La ligne 2 génère du bruit, comme vous l'avez fait. Juste au lieu d'utiliser la condition, j'ai utilisé les indecies de la ligne de base. Et enfin, je demande à R d'ajouter le bruit aux lignes qui n'ont que la ligne de base. Si ce n'est pas encore clair, essayez de 'print (baseline.index)', 'print (App [baseline.index,])' –

+0

oui, je suis conscient de cela :) seul le bruit ne correspond pas à un calcium réaliste courbe de base car elle bascule rapidement. Mais c'est un problème pour lui-même. Ton code est adorable :). – Arne