Karolas Posted April 16, 2013 at 04:03 PM Report #503422 Posted April 16, 2013 at 04:03 PM Boas, Estou a fazer um trabalho, para uma cadeira de programação e estou a ter algumas dúvidas. Está aqui o enunciado: http://pdfcast.org/pdf/trabalho-matlab-octave Já fiz duas funções: uma para ler o url e outra para juntar todas as 36 amostras numa tabela. Agora não consigo fazer uma função para separar os cancerosos(os que acabam em em 1) e os não cancerosos(acabem em 2) estão aqui as duas funções criadas: function dados=ledados(url) %dados=ledados(url) %recebe o url das amostras %devolve a matriz numérica da amostra com os dados dos 400 genes %e o ultimo valor indica se é ou não um tecido canceroso [dadosStr,sucesso]=urlread(url); if sucesso dados=str2num(dadosStr); else dados=[]; disp('whop whop'); end end function dado=tabela(vector) %dado=tabela(vector) %recebe os vectores contidos num determinado url %devolve as matrizes numéricas contidos no url e coloca-os %a todos em colunas seguidas for k=1:length(vector); b=num2str(k); a=strcat(vector, 'amostra',b); u=ledados(a); for j=1:length(u); v(j,k)=u(j); end end dado=v end
Rui Carlos Posted April 16, 2013 at 04:20 PM Report #503430 Posted April 16, 2013 at 04:20 PM Convinha colocares aqui as partes relevantes do enunciado (para tornar o tópico auto-contido). Rui Carlos Gonçalves
Karolas Posted April 16, 2013 at 08:22 PM Author Report #503476 Posted April 16, 2013 at 08:22 PM Resumidamente o trabalho é o seguinte: Temos o seguinte url http://ssdi.di.fct.unl.pt/ice/b/tp1/ , que tem 36 amostras. http://ssdi.di.fct.unl.pt/ice/b/tp1/amostra1, http://ssdi.di.fct.unl.pt/ice/b/tp1/amostra2 até http://ssdi.di.fct.unl.pt/ice/b/tp1/amostra36, têm cada uma 401 linhas. Da linha 1 até à linha 400, representam 400 genes. A linha 401 apenas indica se o tecido é canceroso (aparece 1) ou não aparece (2). O primeiro passo é colocar todas as amostras em colunas como mostra o seguinte exemplo: Ou seja fica com uma matriz 401x36. Esta já esta feita é a tabela(url) acima postada. O segundo passo é fazer uma função que separe os tecidos cancerosos dos não cancerosos, ou seja, duas matrizes uma com os 1 no final e outra com os 2 no final. O terceiro e quarto passos, são criar uma função para a média e outra para o desvio padrão de cada gene (linha) e juntá-las às duas matrizes anteriormente separadas aqui vai um exemplo de como deverá ser o resultado final: Cancerosos Não canceroso Depois disto é criar uma função para a calcular a discrepância, a discrepância é calculada de seguinte forma: Depois aparece algo assim:
Rui Carlos Posted April 17, 2013 at 09:40 AM Report #503540 Posted April 17, 2013 at 09:40 AM Para o primeiro caso, precisas de criar duas matrizes (m1 e m2). Depois percorres as colunas da matriz com as amostras, e dependendo do valor da última linha, escolhes a matrix a adicionar. Tens ainda que remover a última linha, que deve ser algo do género m11 = m1(1:400, 🙂. Podes também ver esta discussão, pois o Matlab até deve permitir fazer a separação sem ciclos e condicionais, mas não tenho o Matlab instalado para testar. Qualquer coisa como m1 = m(:,m(401, 🙂 == 1). Para média e afins, o Matlab tem uma função que faz exactamente o que precisas: mean. (Repara que essa função já lida com matrizes. Vê o segundo exemplo para o teu caso.) Para o desvio padrão, penso que tens que usar a função std. Depois é só adicionares as colunas às matrixes ([m1 vector_com_avg vector_com_std]). Neste ponto, convém que já saibas resolver o resto sozinho. Rui Carlos Gonçalves
FCT_Tf Posted April 18, 2013 at 05:23 PM Report #503860 Posted April 18, 2013 at 05:23 PM Karolas, tudo bem? Por acaso também estou a fazer o mesmo genero de trabalho, só que o enunciado é diferente e tenho 36 amostras e 400 dados. Só que não estou nem estou a conseguir criar o segundo programa que lê as amostras do link, so consegui fazer o primeiro ficheiro que lê o ficheiro total, não me podes dar uma ajuda sff? Não consiguo fazer o inicio quanto mais chegar a imagem no final do trabalho...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now