m_SingleUnitDecodingAlcoholExposed.m 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. %decodes trial identity from spiking across bins for each individual neuron
  2. clear all
  3. load('RAWvppsALL.mat')
  4. load('RAWvpppsALL.mat')
  5. load('RAWvppasALL.mat')
  6. load('RAWvpppasALL.mat')
  7. for PavInst=1:4; %DS is 1, Pav is 2
  8. if PavInst==1
  9. RAW=RAWvpppsALL;
  10. else if PavInst==2
  11. RAW=RAWvppsALL;
  12. else if PavInst==3
  13. RAW=RAWvpppasALL;
  14. else if PavInst==4
  15. RAW=RAWvppasALL;
  16. end
  17. end
  18. end
  19. end
  20. folds = 5; %number of times cross-validated:
  21. Dura=[0 0.3]; %size of bin used for decoding:
  22. bins = 13; %number of bins
  23. binint = 0.3; %spacing of bins
  24. binstart = -.9; %start time of first bin relative to event
  25. shuffs = 1; %number of shuffled models created
  26. trials = 30; %max number of trials to use
  27. NN = 0;
  28. %events being compared
  29. UnitMdlAcc=NaN(100,bins);
  30. UnitMdlAccShuff=NaN(100,bins);
  31. for i=1:length(RAW) %loops through sessions
  32. if (PavInst==1 | PavInst==2)
  33. RD1=strcmp('CSPlus1', RAW(i).Einfo(:,2));
  34. RD2=strcmp('CSMinus1', RAW(i).Einfo(:,2));
  35. else
  36. RD1=strcmp('CSPlus', RAW(i).Einfo(:,2));
  37. RD2=strcmp('CSMinus', RAW(i).Einfo(:,2));
  38. end
  39. for j= 1:size(RAW(i).Nrast,1) %Number of neurons per session
  40. NN=NN+1; %neuron counter
  41. for l=1:bins
  42. LowHz=zeros(1,1);
  43. DecodeSpikes=NaN(1,1);
  44. DecodeRs=NaN(1,1);
  45. %find all spikes surrounding ev1
  46. [PSR1,N1]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{RD1},[(Dura(1)+(binstart - binint)+l*binint) (Dura(2)+(binstart - binint)+l*binint)],{2});% makes trial by trial rasters. PSR1 is a cell(neurons, trials)
  47. %only do at most the number of trials listed above
  48. if N1>trials
  49. trials1=trials;
  50. else
  51. trials1=N1;
  52. end
  53. %get the number of spikes on each trial
  54. for m=1:trials1
  55. DecodeSpikes(m,1)=sum(PSR1{1,m}>(binstart));
  56. DecodeRs(m,1)=1;
  57. end
  58. %find all spikes surrounding ev2
  59. [PSR2,N2]=MakePSR04(RAW(i).Nrast(j),RAW(i).Erast{RD2},[(Dura(1)+(binstart - binint)+l*binint) (Dura(2)+(binstart - binint)+l*binint)],{2});% makes trial by trial rasters. PSR1 is a cell(neurons, trials)
  60. %only do at most the number of trials listed above
  61. if N2>trials
  62. trials2=trials;
  63. else
  64. trials2=N2;
  65. end
  66. for n=1:trials2
  67. DecodeSpikes(n+m,1)=sum(PSR2{1,n}>(binstart));
  68. DecodeRs(n+m,1)=2;
  69. end
  70. if sum(DecodeSpikes(1:trials1,1))<7 || sum(DecodeSpikes((1+trials1):(trials1+trials2),1))<7 %prevents errors with LDA on conditions with no variance
  71. LowHz(1,1)=1;
  72. end
  73. %if one neuron or more has too few spikes, so LDA has error because not
  74. %enough variance, this removes those neurons from the analysis
  75. if sum(LowHz)==0
  76. %creating models
  77. CVacc = NaN(folds,1);
  78. CVaccSh = NaN(folds,1);
  79. %normal model
  80. Partitions = cvpartition(DecodeRs,'KFold',folds);
  81. for r = 1:folds
  82. LDAModel = fitcdiscr(DecodeSpikes(Partitions.training(r),:),DecodeRs(Partitions.training(r)));
  83. prediction = predict(LDAModel,DecodeSpikes(Partitions.test(r),:));
  84. actual = DecodeRs(Partitions.test(r));
  85. correct = prediction - actual;
  86. CVacc(r) = sum(correct==0) / length(correct);
  87. end
  88. %shuffled model
  89. for q=1:shuffs
  90. DecodeRsSh=DecodeRs(randperm(length(DecodeRs)));
  91. PartitionsSh = cvpartition(DecodeRsSh,'KFold',folds);
  92. for s = 1:folds
  93. LDAModelSh = fitcdiscr(DecodeSpikes(PartitionsSh.training(s),:),DecodeRsSh(PartitionsSh.training(s)));
  94. predictionSh = predict(LDAModelSh,DecodeSpikes(PartitionsSh.test(s),:));
  95. actualSh = DecodeRsSh(PartitionsSh.test(s));
  96. correctSh = predictionSh - actualSh;
  97. CVaccSh(s) = sum(correctSh==0) / length(correctSh);
  98. end
  99. AccShuff(q,1) = nanmean(CVaccSh);
  100. end
  101. UnitMdlAcc(NN,l) = nanmean(CVacc);
  102. UnitMdlAccShuff(NN,l) = nanmean(AccShuff);
  103. else
  104. UnitMdlAcc(NN,l) = NaN;
  105. UnitMdlAccShuff(NN,l) = NaN;
  106. end
  107. end
  108. fprintf('Neuron ID # %d\n',NN);
  109. end %neurons: FOR j= 1:size(RAW(i).Nrast,1)
  110. end %sessions: FOR i=1:length(RAW)
  111. if PavInst==1
  112. UnitMdlAccDSSucrose=UnitMdlAcc;
  113. UnitMdlAccDSShuffSucrose=UnitMdlAccShuff;
  114. save('UnitMdlDSSucrose.mat','UnitMdlAccDSSucrose')
  115. save('UnitMdlDSShuffSucrose.mat','UnitMdlAccDSShuffSucrose')
  116. else if PavInst==2
  117. UnitMdlAccPavSucrose=UnitMdlAcc;
  118. UnitMdlAccPavShuffSucrose=UnitMdlAccShuff;
  119. save('UnitMdlPavSucrose.mat','UnitMdlAccPavSucrose')
  120. save('UnitMdlPavShuffSucrose.mat','UnitMdlAccPavShuffSucrose')
  121. else if PavInst==3
  122. UnitMdlAccDSAlcohol=UnitMdlAcc;
  123. UnitMdlAccDSShuffAlcohol=UnitMdlAccShuff;
  124. save('UnitMdlDSAlcohol.mat','UnitMdlAccDSAlcohol')
  125. save('UnitMdlDSShuffAlcohol.mat','UnitMdlAccDSShuffAlcohol')
  126. else if PavInst==4
  127. UnitMdlAccPavAlcohol=UnitMdlAcc;
  128. UnitMdlAccPavShuffAlcohol=UnitMdlAccShuff;
  129. save('UnitMdlPavAlcohol.mat','UnitMdlAccPavAlcohol')
  130. save('UnitMdlPavShuffAlcohol.mat','UnitMdlAccPavShuffAlcohol')
  131. end
  132. end
  133. end
  134. end
  135. end